Membaca "Apa perbedaan antara perintah Halt dan Shutdown?" , Saya biasanya tahu apa yang dilakukan perintah shutdown, dengan atau tanpa opsi -h/-r.
Perintah “halt” mematikan sistem ke run-level 0
sistem.Perintah “shutdown” melakukan mematikan sistem ke run-level
1 tanpa perintah -h atau -r.
Bagaimana dengan perintah "poweroff" apakah itu masuk ke run-level 0 atau 1 ?
Apakah ini satu-satunya perbedaan utama antara ketiga perintah ini?
Jawaban yang Diterima:
Dan sekarang, jawaban sistem.
Anda menggunakan, sesuai tag pada pertanyaan Anda, Red Hat Enterprise Linux. Sejak versi 7, yang telah menggunakan systemd. Tidak ada jawaban lain yang benar untuk dunia systemd; bahkan tidak ada beberapa asumsi dalam pertanyaan Anda.
- Lupakan runlevel; mereka ada, tetapi hanya sebagai shim kompatibilitas. Dokumentasi systemd menyatakan bahwa konsepnya "usang". Jika Anda mulai mempelajari hal ini di sistem operasi systemd, jangan mulai dari sana.
- Lupakan halaman manual yang dikutip marcelm; itu sama sekali bukan dari toolset yang tepat, dan merupakan deskripsi dari perintah toolset lain, salah untuk systemd. Ini untuk
halt
perintah dari van Smoorenburg “System 5”init
utilitas. - Abaikan pernyataan yang
/sbin/halt
adalah tautan simbolis ke/sbin/reboot
; itu tidak benar dengan systemd. Tidak adareboot
yang terpisah program sama sekali. - Abaikan pernyataan yang
halt
ataureboot
aktifkanshutdown
program dengan argumen baris perintah; mereka juga tidak benar dengan systemd. Tidak adashutdown
separate yang terpisah program sama sekali.
Setiap perangkat manajemen sistem memiliki versi utilitas ini. systemd, pemula, nosh, van Smoorenburg init
, dan BSD init
semua memiliki halt
, poweroff
, Dan seterusnya. Pada masing-masing mekanik mereka sedikit berbeda. Begitu juga halaman manual mereka.
Dalam set alat systemd halt
,poweroff
,reboot
, telinit
, dan shutdown
adalah semua tautan simbolis ke /bin/systemctl
. Mereka adalah semua kompatibilitas mundur, yang hanya merupakan singkatan untuk menjalankan antarmuka baris perintah utama systemd:systemctl
. Mereka semua dipetakan ke (dan sebenarnya) tunggal yang sama program. (Sesuai kesepakatan, shell memberitahunya nama mana yang telah dipanggil.)
target, bukan runlevel
Sebagian besar perintah tersebut adalah singkatan untuk memberi tahu systemd, menggunakan systemctl
, untuk mengisolasi target tertentu . Isolasi dijelaskan dalam systemctl
halaman manual (q.v.), tetapi dapat, untuk tujuan jawaban ini, dianggap sebagai memulai target dan menghentikan yang lain. Target standar yang digunakan dalam systemd terdaftar di systemd.special
(8) halaman manual.
Diagram pada bootup
(7) halaman manual di perangkat systemd, khususnya yang terakhir, menunjukkan bahwa ada tiga target "final" yang relevan di sini:
halt.target
— Setelah sistem mencapai status mengisolasi target ini sepenuhnya, sistem akan memanggilreboot(RB_HALT_SYSTEM)
panggilan sistem. Kernel akan mencoba memasuki program monitor ROM, atau hanya menghentikan CPU (menggunakan mekanisme apa pun yang sesuai untuk melakukannya).reboot.target
— Setelah sistem mencapai status mengisolasi target ini sepenuhnya, sistem akan memanggilreboot(RB_AUTOBOOT)
panggilan sistem (atau yang setara dengan baris perintah ajaib). Kernel akan mencoba memicu boot ulang.poweroff.target
— Setelah sistem mencapai status mengisolasi target ini sepenuhnya, sistem akan memanggilreboot(RB_POWER_OFF)
panggilan sistem. Kernel akan mencoba untuk menghapus daya dari sistem, jika memungkinkan.
Ini adalah hal-hal yang harus Anda pikirkan saat sistem final menyatakan, bukan menjalankan level. Perhatikan dari diagram bahwa sistem target systemd itu sendiri mengkodekan hal-hal yang, dalam sistem lain, implisit daripada eksplisit:seperti gagasan bahwa masing-masing target akhir ini mencakup shutdown.target
target, sehingga seseorang menjelaskan layanan yang harus dihentikan sebelum dimatikan dengan membuatnya berkonflik dengan shutdown.target
sasaran.
systemctl
mencoba mengirim permintaan ke systemd-logind
ketika pengguna yang menelepon bukan pengguna super. Itu juga meneruskan shutdown yang tertunda ke systemd-shutdownd
. Dan beberapa singkatan memicu wall
pemberitahuan. 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 terjadwal:
systemctl isolate halt.target
memiliki singkatan:shutdown -H now
systemctl halt
- tanpa hiasan
halt
systemctl isolate reboot.target
memiliki singkatan:shutdown -r now
telinit 6
systemctl reboot
reboot
polos tanpa hiasan
systemctl isolate poweroff.target
memiliki singkatan:shutdown -P now
telinit 0
shutdown now
systemctl poweroff
poweroff
polos tanpa hiasan
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:
- Perilaku tradisional
shutdown now
. tanpa opsi telah beralih ke mode pengguna tunggal . Ini tidak terjadi dengan systemd.rescue.target
— mode pengguna tunggal diganti namanya menjadi mode penyelamatan di systemd — tidak dapat dijangkau denganshutdown
perintah. telinit
benar-benar sepenuhnya mengabaikan semuarunlevelN.target
dandefault.target
tautan simbolik dalam sistem file yang dijelaskan oleh halaman manual. Pemetaan yang disebutkan di atas tertanam dalamsystemctl
program, dalam sebuah tabel.- systemd tidak memiliki gagasan tentang tingkat proses saat ini . Pengoperasian perintah ini tidak bergantung pada "jika Anda berada di run-level N “.
- The
--force
opsi kehalt
,reboot
, danpoweroff
perintahnya sama dengan mengatakan--force --force
kesystemctl halt
,systemctl reboot
, dansystemctl poweroff
perintah. Ini membuatsystemctl
coba panggilreboot()
secara langsung. Biasanya ia hanya mencoba mengisolasi target. telinit
tidak sama denganinit
. Mereka adalah program yang berbeda di dunia systemd, yang terakhir adalah nama lain untuksystemd
program, bukan untuksystemctl
program.systemd
program tidak harus dikompilasi dengan kompatibilitas van Smoorenburg sama sekali, dan pada beberapa sistem operasi sistem mengeluh tentang dipanggil secara tidak benar jika seseorang mencobainit N
.
Bacaan lebih lanjut
- Apakah ada alasan bagus untuk menghentikan sistem tanpa memutus daya?
- Mengapa `init 0` menghasilkan “Argumen Berlebihan” pada pemasangan Arch?
- Stephen Wadeley (2014). “8. Mengelola Layanan dengan systemd” Panduan Administrator Sistem Red Hat Enterprise Linux 7 . Topi Merah.
- Puisi Lennart (2013-10-07).
systemctl
. halaman manual systemd. freedesktop.org. - Puisi Lennart (2013-10-07).
systemd.special
. halaman manual systemd. freedesktop.org. - Puisi Lennart (2013-10-07).
bootup
. halaman manual systemd. freedesktop.org. - Jonathan de Boyne Pollard (2018).
init
. Panduan nosh . Perangkat Lunak.