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.
- Lupakan runlevel ; mereka ada, tetapi hanya sebagai shims kompatibilitas. Dokumentasi systemd menyatakan bahwa konsep ini "usang". Jika Anda mulai mempelajari hal-hal ini pada sistem operasi systemd, jangan mulai dari sana.
- Lupakan tentang halaman manual yang dikutip marcelm; itu bukan dari toolset yang benar sama sekali, dan merupakan deskripsi dari perintah toolset lain, salah untuk systemd. Ini satu-satunya untuk
halt
perintah dari utilitas "Sistem 5" van Smoorenburg init
.
- Abaikan pernyataan yang
/sbin/halt
merupakan tautan simbolis ke /sbin/reboot
; itu tidak benar dengan systemd. Tidak ada reboot
program yang terpisah sama sekali.
- Mengabaikan pernyataan yang
halt
atau reboot
memanggil shutdown
program yang dengan argumen baris perintah; mereka juga tidak benar dengan systemd. Tidak ada shutdown
program yang terpisah sama sekali.
Setiap perangkat manajemen sistem memiliki versi utilitas ini. systemd, pemula, nosh , van Smoorenburg init
, dan BSD init
semua memiliki mereka sendiri halt
, poweroff
dan sebagainya. Pada masing-masing mekanisme mereka sedikit berbeda. Begitu juga halaman manual mereka.
Dalam toolset systemd halt
, poweroff
,reboot
, telinit
, dan shutdown
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 di systemctl
halaman manual (qv), tetapi dapat, untuk keperluan jawaban ini, dianggap sebagai memulai target dan menghentikan yang lain. Target standar yang digunakan dalam systemd tercantum pada systemd.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 disebut reboot(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 memanggil reboot(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 disebut reboot(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 para shutdown.target
sasaran.
systemctl
mencoba mengirim permintaan systemd-logind
ketika pengguna panggilan bukan superuser. Itu juga melewati shutdown tertunda ke systemd-shutdownd
. Dan beberapa steno memicu wall
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
- polos tanpa hiasan
halt
systemctl isolate reboot.target
memiliki singkatan:
shutdown -r now
telinit 6
systemctl reboot
- polos tanpa hiasan
reboot
systemctl isolate poweroff.target
memiliki singkatan:
shutdown -P now
telinit 0
shutdown now
systemctl poweroff
- polos tanpa hiasan
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:
Setelah menguraikan berbagai sintaks baris perintah yang berbeda, semua ini akhirnya berakhir di jalur kode yang sama di dalam systemctl
program.
Catatan:
- Perilaku tradisional opsi-kurang
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 dengan shutdown
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
- systemd tidak memiliki gagasan tentang level run saat ini . Pengoperasian perintah-perintah ini tidak tergantung pada "jika Anda berada di run-level N ".
- The
--force
pilihan untuk halt
, reboot
dan poweroff
perintah adalah sama dengan mengatakan --force --force
kepada systemctl halt
, systemctl reboot
, dan systemctl poweroff
perintah. Ini membuat systemctl
mencoba menelepon reboot()
langsung. Biasanya itu hanya mencoba untuk mengisolasi target.
telinit
tidak sama dengan init
. Mereka adalah program yang berbeda di dunia systemd, yang terakhir menjadi nama lain untuk systemd
program, bukan untuk systemctl
program. The systemd
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