Membaca "Apa perbedaan antara perintah Stop dan Shutdown?" , Saya umumnya memiliki ide apa yang dilakukan perintah shutdown, dengan atau tanpa opsi -h / -r.
Perintah "hentikan" melakukan matikan sistem untuk menjalankan level 0 sistem.
Perintah "shutdown" melakukan matikan sistem untuk menjalankan level 1 tanpa perintah -h atau -r.
Bagaimana dengan perintah "poweroff" yang digunakan untuk menjalankan level 0 atau 1? Apakah ini satu-satunya perbedaan utama antara ketiga perintah ini?
Jawaban:
Dan sekarang, jawaban systemd.
Anda menggunakan, per tag pada pertanyaan Anda, Red Hat Enterprise Linux. Sejak versi 7, yang telah menggunakan systemd. Tidak ada jawaban lain yang benar untuk dunia systemd; atau bahkan beberapa asumsi dalam pertanyaan Anda.
halt
perintah dari utilitas "Sistem 5" van Smoorenburginit
./sbin/halt
merupakan tautan simbolis ke/sbin/reboot
; itu tidak benar dengan systemd. Tidak adareboot
program yang terpisah sama sekali.halt
ataureboot
memanggilshutdown
program yang dengan argumen baris perintah; mereka juga tidak benar dengan systemd. Tidak adashutdown
program yang terpisah sama sekali.Setiap perangkat manajemen sistem memiliki versi utilitas ini. systemd, pemula, nosh , van Smoorenburg
init
, dan BSDinit
semua memiliki mereka sendirihalt
,poweroff
dan sebagainya. Pada masing-masing mekanisme mereka sedikit berbeda. Begitu juga halaman manual mereka.Dalam toolset systemd
halt
,poweroff
,reboot
,telinit
, danshutdown
adalah semua link simbolik ke/bin/systemctl
. Mereka semua shims kompatibilitas mundur, yang hanya shorthands untuk menerapkan antarmuka baris perintah utama systemd ini:systemctl
. Mereka semua memetakan (dan pada kenyataannya) program tunggal yang sama . (Secara konvensi, shell memberitahukan nama yang digunakan olehnya.)target, bukan runlevel
Sebagian besar dari perintah itu adalah singkatan untuk mengatakan systemd, menggunakan
systemctl
, untuk mengisolasi target tertentu . Isolasi dijelaskan disystemctl
halaman manual (qv), tetapi dapat, untuk keperluan jawaban ini, dianggap sebagai memulai target dan menghentikan yang lain. Target standar yang digunakan dalam systemd tercantum padasystemd.special
halaman manual (8).Diagram pada
bootup
halaman manual (7) di toold toolset, khususnya yang terakhir, menunjukkan bahwa ada tiga target "final" yang relevan di sini:halt.target
- Setelah sistem mencapai keadaan sepenuhnya mengisolasi target ini, itu akan disebutreboot(RB_HALT_SYSTEM)
system call. Kernel akan berusaha memasuki program monitor ROM, atau hanya menghentikan CPU (menggunakan mekanisme apa pun yang sesuai untuk melakukannya).reboot.target
- Setelah sistem mencapai keadaan mengisolasi penuh target ini, ia akan memanggilreboot(RB_AUTOBOOT)
system call (atau yang setara dengan baris perintah ajaib). Kernel akan berusaha memicu reboot.poweroff.target
- Setelah sistem mencapai keadaan sepenuhnya mengisolasi target ini, itu akan disebutreboot(RB_POWER_OFF)
system call. Kernel akan berusaha untuk menghilangkan daya dari sistem, jika memungkinkan.Ini adalah hal-hal yang Anda harus pikirkan ketika sistem terakhir menyatakan, bukan menjalankan level. Perhatikan dari diagram bahwa systemd sistem target itu sendiri mengkodekan hal-hal yang, dalam sistem lain, tersirat daripada eksplisit: seperti gagasan bahwa masing-masing target akhir ini mencakup
shutdown.target
target, sehingga seseorang menggambarkan layanan yang harus dihentikan sebelum shutdown oleh memiliki mereka bertentangan dengan parashutdown.target
sasaran.systemctl
mencoba mengirim permintaansystemd-logind
ketika pengguna panggilan bukan superuser. Itu juga melewati shutdown tertunda kesystemd-shutdownd
. Dan beberapa steno memicuwall
notifikasi. Selain kerumitan itu, yang akan membuat jawaban ini beberapa kali lebih lama, dengan asumsi bahwa Anda saat ini adalah pengguna super dan tidak meminta tindakan yang dijadwalkan:systemctl isolate halt.target
memiliki singkatan:shutdown -H now
systemctl halt
halt
systemctl isolate reboot.target
memiliki singkatan:shutdown -r now
telinit 6
systemctl reboot
reboot
systemctl isolate poweroff.target
memiliki singkatan:shutdown -P now
telinit 0
shutdown now
systemctl poweroff
poweroff
systemctl isolate rescue.target
memiliki singkatan:telinit 1
systemctl rescue
systemctl isolate multi-user.target
memiliki singkatan:telinit 2
telinit 3
telinit 4
systemctl isolate graphical.target
memiliki singkatan:telinit 5
Setelah menguraikan berbagai sintaks baris perintah yang berbeda, semua ini akhirnya berakhir di jalur kode yang sama di dalam
systemctl
program.Catatan:
shutdown now
adalah beralih ke mode pengguna tunggal . Ini tidak terjadi dengan systemd.rescue.target
- mode single-user diubah namanya menjadi mode penyelamatan di systemd - tidak dapat dijangkau denganshutdown
perintah.telinit
benar-benar sepenuhnya mengabaikan semua itu dan tautan simbolik dalam sistem file yang dijelaskan halaman manual. Pemetaan yang sudah ada sebelumnya telah tertanam dalam program, dalam sebuah tabel.runlevelN.target
default.target
systemctl
--force
pilihan untukhalt
,reboot
danpoweroff
perintah adalah sama dengan mengatakan--force --force
kepadasystemctl halt
,systemctl reboot
, dansystemctl poweroff
perintah. Ini membuatsystemctl
mencoba meneleponreboot()
langsung. Biasanya itu hanya mencoba untuk mengisolasi target.telinit
tidak sama denganinit
. Mereka adalah program yang berbeda di dunia systemd, yang terakhir menjadi nama lain untuksystemd
program, bukan untuksystemctl
program. Thesystemd
Program tidak selalu disusun dengan kompatibilitas van Smoorenburg sama sekali, dan pada beberapa sistem operasi systemd mengeluh tentang yang dipanggil tidak benar jika salah satu upaya .init N
Bacaan lebih lanjut
systemctl
. halaman manual systemd. freedesktop.org.systemd.special
. halaman manual systemd. freedesktop.org.bootup
. halaman manual systemd. freedesktop.org.init
. Panduan nosh . Perangkat lunak.sumber
systemctl reboot
harus setara dengansystemctl start reboot.target --job-mode=replace-irreversible
. Menggunakan mode pekerjaan lain kurang kuat. unix.stackexchange.com/questions/381739/…systemctl reboot
cara "aman" untuk mem-boot ulang, mis.init 6
Dengan cara apa kita akan mem-boot ulang dengan aman?halt
menginstruksikan perangkat keras untuk menghentikan semua fungsi CPU , tetapi membiarkannya dalam kondisi aktif. Ini biasanya berarti seseorang harus menyalakan ulang atau mematikan mesin secara manual dengan menekan tombol daya sesudahnya. Cara spesifik untuk mencapai ini adalah arsitektur khusus, tetapi misalnya set instruksi x86 memberikanHLT
instruksi yang menghentikan unit pemrosesan pusat (CPU) sampai interupsi eksternal berikutnya dipecat.poweroff
, sepertihalt
, menghentikan CPU tetapi juga mengirimkan sinyal perangkat keras ACPI yang akan menginstruksikan sistem untuk memulai dengan shutdown yang lengkap dan langsung. Ini kira-kira sama dengan menekan tombol daya pada komputer desktop biasa.Keduanya
halt
danpoweroff
biasanya merupakan tautan simbolis kereboot
executable, yang biasanya akan memanggilshutdown
alat dengan argumen yang sesuai (-h
,-P
ataur
) tergantung pada apakahhalt
,poweroff
ataureboot
digunakan untuk memanggil alat. Namun, Ketika--force
opsi diteruskan kereboot
, atau ketika di runlevel 0 atau 6,reboot
akan memanggilreboot()
sistem panggilan dengan kode perintah yang sesuai itu sendiri.sumber
/sbin/init 0
atau/sbin/telinit 0
harus sama dengan menghentikan sistem, meskipun langkah-langkah spesifik yang diambil akan tergantung pada sistem init yang dimaksud, seperti System-V init , pemula atau systemd . Jika Anda menjalankan RHEL, Anda akan menggunakan systemd.halt
,poweroff
danshutdown -h
sepenuhnya setara. Kenyataannya, berhenti dan mati daya tidak melakukan apa-apa selain meneleponshutdown -h
. Dari halaman stop / poweroff:Shutdown kemudian dilanjutkan untuk mematikan sistem dengan beralih ke runlevel 0.
Berhenti dan matikan (dan reboot) melakukan peran ganda; ketika dieksekusi dalam proses mematikan (yaitu, di runlevel 0 atau 6), mereka melakukan operasi tingkat rendah yang diperlukan untuk secara fisik menghentikan, mematikan, atau me-reboot mesin, seperti yang dijelaskan dalam jawaban lain.
sumber