GNU/Linux >> Belajar Linux >  >> Linux

Perbedaan Antara Perintah Ini Untuk Menurunkan Server Linux?

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 ada reboot yang terpisah program sama sekali.
  • Abaikan pernyataan yang halt atau reboot aktifkan shutdown program dengan argumen baris perintah; mereka juga tidak benar dengan systemd. Tidak ada shutdown 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 memanggil reboot(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 memanggil reboot(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 memanggil reboot(RB_POWER_OFF) panggilan sistem. Kernel akan mencoba untuk menghapus daya dari sistem, jika memungkinkan.
Terkait:Bagaimana menjalankan perintah yang melibatkan pengalihan atau pemipaan dengan Sudo?

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 dengan shutdown perintah.
  • telinit benar-benar sepenuhnya mengabaikan semua runlevelN.target dan default.target tautan simbolik dalam sistem file yang dijelaskan oleh halaman manual. Pemetaan yang disebutkan di atas tertanam dalam systemctl 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 ke halt , reboot , dan poweroff perintahnya sama dengan mengatakan --force --force ke systemctl halt , systemctl reboot , dan systemctl poweroff perintah. Ini membuat systemctl coba panggil reboot() secara langsung. Biasanya ia hanya mencoba mengisolasi target.
  • telinit tidak sama dengan init . Mereka adalah program yang berbeda di dunia systemd, yang terakhir adalah nama lain untuk systemd program, bukan untuk systemctl 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 mencoba init 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.

Linux
  1. Pelajari Perbedaan Antara Perintah "su" dan "su -" di Linux

  2. Apa perbedaan antara file authorized_keys dan known_hosts untuk SSH?

  3. Apa perbedaan antara panggilan Perpustakaan dan panggilan Sistem di Linux?

  1. 3 perintah Linux untuk mematikan sistem dan Anda akan dapat melakukannya dengan mudah

  2. 3 Perintah Linux yang Berguna untuk Administrator Sistem

  3. Apa Perbedaan Antara Pengguna Biasa dan Pengguna Sistem?

  1. Perbedaan Antara Perintah "su" dan "su -" di Linux

  2. Centos – Apa Perbedaan Antara /usr/lib/systemd/system Dan /etc/systemd/system?

  3. Linux – Bagaimana Cara Mengatur Afinitas Cpu Default Untuk Semua Daemon Di Systemd?