Apakah systemd masih tahu tentang runlevels?

17

Apakah systemd masih memiliki konsep runlevels? Misalnya apakah itu tidak ada gunanya untuk digunakan telinit <number>?

drpaneas
sumber
2
Kemungkinan duplikat Ubah runlevel dengan systemd
Stephen Harris
saya tidak tahu tentang jawaban di bawah ini, tapi di RHEL / Centos 7.6 init 1atau init 3atau init 5atau init 6atau init 0atau runlevelmasih berperilaku seperti mereka selalu memiliki, dan itu semua saya peduli. Sintaksnya jauh lebih mudahsystemctl blabla blabla.blabla
ron

Jawaban:

14

SystemD Run-Level Low-Down

Di dalam SystemD (aemon), runlevel diekspos sebagai "Target." Konsepnya masih ada, tetapi alur kerja untuk menghasilkan hasil yang diinginkan untuk kebutuhan Anda berbeda.

Yang terlampir harus menjelaskan masalah ini.

Bagaimana cara mengubah runlevel saat ini?

$ systemctl isolate runlevelX.target

Bagaimana cara mengubah runlevel default untuk boot berikutnya?

# Create a symlink
$ ln -sf /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target
  • ln -sf TARGET DESTINATION
  • -s menciptakan tautan simbolis
  • -f menghapus file tujuan yang ada

ATAU (seperti yang disarankan @centimane) cukup gunakan perintah "diberkati" systemd:

systemctl set-default [target name].target

Bagaimana cara mengidentifikasi runlevel saat ini?

$ systemctl list-units --type=target
Tyler Maginnis
sumber
Masih bisakah saya menggunakan perintah init untuk beralih antar runlevel?
drpaneas
2
Jika paket systemd Anda dibangun dengan dukungan compat SysV, itu akan menyertakan symlink telinit ke biner systemd, yang, ketika disebut sebagai telinit, akan memetakan runlevel 0-6 ke target systemd - periksa telinit (8) untuk daftar pemetaan tersebut .
Wieland
2
Untuk mengubah target default, Anda harus menggunakan systemctl set-default [target name].targetdaripada membuat tautan secara manual.
Centimane
13

Tidak. Karena orang-orang systemd sendiri menulis dua kali lipat, sekali di telinitmanual mereka dan sekali di runlevelmanual mereka , runlevel adalah "usang". Anda bisa melupakan runlevel.

Hal-hal ini sebenarnya tidak ada di systemd sama sekali, selain beberapa shims kompatibilitas.

  • Ada beberapa tautan simbolis untuk nama target, tetapi target ini tidak pernah benar-benar digunakan oleh systemd.
    • Sebaliknya, proses bootstrap menggunakan a default.target(dan karenanya satu atau keduanya dari a graphical.targetdan a multi-user.target), a rescue.target, atau a emergency.target. Dan proses penutupan melibatkan a shutdown.target, a reboot.target, a halt.target, atau a poweroff.target. Tidak ada target level run yang terlibat dalam bootstrap atau shutdown.
    • The telinitperintah, yang satu mungkin berpikir menggunakan kompatibilitas link simbolik untuk memetakan argumen command-line-nya, tidak melakukan itu. Ada meja tertanam dalam kode sumber dari telinitprogram dan nomor 2, 3, 4, dan 5sebagai argumen untuk perintah didesain untuk memetakan ke multi-user.targetdan graphical.target.
    • systemd-update-utmp juga memiliki meja bawaan internal.
  • Tidak ada "tabel init" dari hal-hal runlevel. systemd hanya kompatibel dengan van Smoorenburg rc, bukan dengan van Smoorenburg init.
  • Tidak ada nilai "level run saat ini" yang dikelola oleh systemd sendiri. Sebaliknya, hampir seluruhnya tidak berdokumen systemd-update-utmpperintah beroperasi secara internal dalam hal aktivasi menyatakan dari rescue.target, multi-user.target, dan graphical.target.
  • systemd-sysv-generator, generator unit layanan kompatibilitas mundur systemd, menggabungkan /etc/rc[234].ddirektori menjadi hanya satu Wanted-Byhubungan ke multi-user.targetdalam unit layanan yang dihasilkan. Tidak ada referensi aktual untuk menjalankan level di unit layanan yang dihasilkan. (Dulu, bertahun-tahun yang lalu, tetapi orang-orang systemd menemukan bahwa ini salah, karena mereka tidak dirujuk di tempat lain.)

Jika seseorang adalah pengguna sistem yang membangun systemd seperti yang dilakukan Arch Linux untuk si penanya di " Mengapa` init 0` menghasilkan "Kelebihan Argumen" pada Arch instal? ", Seseorang bahkan tidak mendapatkan shim kompatibilitas, dan perintah seperti itu sebagai init 0akibat dari perilaku systemd "asli", yaitu untuk mengeluh bahwa perintah telah salah dipanggil.

Bacaan lebih lanjut

JdeBP
sumber
4

Terima kasih banyak. Jadi, jika saya mengerti dengan benar:

Sebagai contoh:

ls -ll /usr/lib/systemd/system/runlevel*.target

Keluaran:

/usr/lib/systemd/system/runlevel0.target -> poweroff.target
/usr/lib/systemd/system/runlevel1.target -> rescue.target
/usr/lib/systemd/system/runlevel2.target -> multi-user.target
/usr/lib/systemd/system/runlevel3.target -> multi-user.target
/usr/lib/systemd/system/runlevel4.target -> multi-user.target
/usr/lib/systemd/system/runlevel5.target -> graphical.target
/usr/lib/systemd/system/runlevel6.target -> reboot.target

Jadi seperti yang Anda lihat, konsep runlevel memang ada, tetapi cukup usang karena fakta bahwa file runlevel.target sebenarnya bukan file "nyata" tetapi tautan lunak ke skema file baru, modern, lebih baik yang dinamai systemd suka menyebutnya "target".

Jadi, jika Anda ingin melakukan sth seperti telinit 5itu akan seperti ini: systemctl isolate runlevel5.target yang identik dengan: systemctl isolate graphical.target(direkomendasikan menurut saya).

Jika Anda tertarik untuk mengetahui semua target yang mungkin:

ls /usr/lib/systemd/system/*.target
drpaneas
sumber
Ya, saya percaya Anda memahami ini dengan benar. Saya akan menjadi pengadopsi SystemD yang terlambat, karena sistem, langkah-langkah-langkah, sistem INIT adalah hal yang paling saya kenal ... Saya memuji bahwa Anda sedang menjelajahi SystemD. Bagian terbaik dari SystemD adalah multi-threading paralelnya, yang memungkinkan boot lebih cepat. Boot multi-Threading dapat diselesaikan dengan INIT.D, tetapi membutuhkan skrip BASH yang kuat.
Tyler Maginnis
BTW, ls -llsetara dengan ls -l. Anda mungkin ingin membiasakan diri menggunakan ls -ld.
G-Man Mengatakan 'Reinstate Monica'
telinit 0Saya telinit 6masih bekerja. Karena ini membantu migrasi, dan saya pikir sebagian besar distro masih belum melihat alasan untuk membatalkan dukungan. isolatejelas bercita-cita untuk meniru bagaimana run-level bekerja, tetapi ada berbagai kasus tepi kejahatan. Saya sangat merekomendasikan mengabaikan semua instruksi isolate runlevel5.targetatau bahkan isolate graphical.target. Contoh tepi kasus: github.com/systemd/systemd/issues/6505
sourcejedi
0

systemd memperkenalkan target sebagai mitra untuk runlevel di sistem inys sysV. pengembang sytemd membuatnya hampir kompatibel dengan sebagian besar skrip sysV. Sama terjadi untuk telinit <runlevel>. Ini diterjemahkan ke dalam systemd equivalen.

Misalnya telinit 0mematikan mesin. systemd memiliki poweroff.target untuk melakukan hal yang sama seperti runlevel 0 . Jadi telinit 0diterjemahkan oleh systemd untuk mengaktifkan poweroff.target .

Tetapi ada beberapa masalah kompatibilitas dengan sistem init sytemd dan sysV-> https://www.freedesktop.org/wiki/Software/systemd/Incompatibilities .

Pangeran
sumber