GNU/Linux >> Belajar Linux >  >> Linux

Memindahkan Kebiasaan Sysvinit Lama ke Systemd?

Saya memiliki serangkaian skrip yang dapat digunakan untuk menginstal dan mengonfigurasi sistem stabil Debian yang baru. Untuk memulai program secara otomatis, saya menggunakan /etc/rc.local tetapi untuk kasus lain saya harus secara manual mengubah /etc/inittab mengajukan. Saya juga memiliki perubahan lain seperti menambahkan --noclear ke baris 1:2345:respawn:/sbin/getty --noclear 38400 tty1 .

Karena saya harus menyesuaikan proses shutdown, saya akhirnya melakukan ini:

l0:0:wait:/etc/rc.halt 0
...
l6:6:wait:/etc/rc.halt 6

dan /etc/rc.halt saya terlihat seperti ini

#!/bin/sh
#   
# rc.halt
#   
# This script is executed when entering level 6/0 (on halt or reboot)

su - teststand -c "/home/teststand/stop_server.sh"  # my custom command

# making sure the halt/reboot process is resumed
test -n "${1}" && /etc/init.d/rc ${1}

exit 0

Hari ini adalah pertama kalinya saya menginstal Debian 8 baru dengan systemd sebagai sistem init default. Saya tidak memikirkannya dan pertama kali terkejut bahwa /etc/inittab file hilang.

Pada sistem saya yang sedang berjalan (@work &@home) saya masih menjalankan sistem saya dengan sysvinit dan itulah mengapa saya memiliki 0 pengalaman dengan systemd .

Saya tahu bahwa saya dapat mengubah ke sysvinit yang lama tapi saya ingin melihat perbedaannya dengan systemd . Selain itu saya sedang menyesuaikan instalasi baru sekarang dan saya tidak punya banyak waktu untuk menyelesaikannya, itu sebabnya saya tidak punya waktu sekarang untuk melihat dokumentasi.

Pertanyaan saya:apakah ada cara untuk dengan cepat mengubah systemd perilaku sehingga saya dapat menambahkan --noclear ke getty dan menggunakan /etc/rc.halt sebagai titik awal untuk reboot/halt?

Pada dasarnya saya dapat dengan cepat mengimpor inittab lama saya perubahan pada systemd ?

Terima kasih

Jawaban yang Diterima:

systemd tidak kompatibel dengan Sistem 5 init , hanya Sistem 5 rc .

Sistem Linux Manajemen sistem 5 gaya terdiri dari dua bagian, init yang berjalan sebagai proses #1 dan rc yang bertugas menjalankan skrip start dan stop. Ini sebenarnya dari dua paket berbeda di Debian. init berasal dari paket sysvinit; dan rc biasanya dari paket sysv-rc, tetapi bisa juga dari file-rc atau paket openrc.

/etc/inittab adalah file konfigurasi yang diproses oleh init . systemd tidak menyediakan mekanisme kompatibilitas mundur untuk ini. mekanisme kompatibilitas mundur Sistem 5 systemd hanya untuk Sistem 5 rc , yang menjalankan program di /etc/init.d/ . (Ini hanya untuk rasa tertentu dari rc , lebih-lebih lagi. systemd tidak mengimplementasikan mekanisme kompatibilitas mundur untuk mekanisme konfigurasi file-rc dan openrc.)

Ini bukan sesuatu yang khusus untuk systemd. Kurang lebih tidak penggantian init/manajer sistem (dengan hanya 1 pengecualian dalam tiga dekade) memproses /etc/inittab .

Untuk memasukkan layanan ke systemd, Anda harus menggunakan mekanisme yang melakukannya dukungan, yaitu unit layanan miliknya sendiri file dan (melalui generator yang otomatis dikonversi menjadi file unit) Sistem 5 rc file konfigurasi di /etc/init.d/ .

Lupakan tentang level lari.

Semua hal runlevel yang Anda kerjakan telah dinyatakan "usang" pada sistem operasi Linux systemd. Tidak ada jalankan level 0 atau 6 untuk masuk. Mereka tidak ada dengan beberapa shim kompatibilitas.

Untuk membuat layanan berjalan saat dimatikan, jawaban yang jelas, yang diberikan oleh banyak orang, adalah membuat unit layanan yang WantedBy shutdown.target . Ini memiliki beberapa perangkap halus, meskipun. Jawaban yang lebih baik, tetapi kurang jelas, adalah membuat unit layanan normal, dengan DefaultDependencies=yes untuk memastikan bahwa itu bertentangan dengan target shutdown, dan letakkan inti layanan di ExecStop bukannya di ExecStart .

[Unit]
Documentation=https://unix.stackexchange.com/questions/233561/

[Service]
Type=oneshot
User=teststand
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/teststand/stop_server.sh

[Install]
WantedBy=multi-user.target

Jangan menggulung Pengawas Iblis Orang Miskin Anda sendiri dalam skrip shell.

Hal-hal seperti itu selalu ditulis dengan buruk.

Terkait:Buat tail -f exit pada pipa yang rusak?

Jika “layanan” Anda hanyalah menjalankan perintah bernama “stop_server.sh”, maka kesimpulannya adalah bahwa ini adalah skrip yang menghentikan server di bawah beberapa sistem manajemen layanan skrip shell.

Ini untuk bencana yang ditulis dengan buruk, reyot, tidak dapat diandalkan, dan berbahaya ini:stop_server.sh stop_server.sh stop_server.sh stop_server.sh stop_server.sh stop_server.sh

Anda memiliki systemd. Manfaatkan itu, dan jalankan layanan apa pun yang sedang dijalankan di sini menggunakan mekanisme manajemen layanan yang tepat. Anda tidak memerlukan ExecStop yang aneh ini -hanya layanan sama sekali jika Anda membuat nyata layanan dapat dijalankan melalui systemd dengan DefaultDependencies=true , karena systemd akan menangani penghentian layanan pada waktu shutdown.

Mengambil Pengawas Iblis Orang Miskin dalam skrip shell yang "mengelola" satu layanan, dan kemudian membungkusnya dalam unit layanan systemd untuk layanan kedua yang kemudian diatur untuk memulai saat shutdown, ketika tujuannya tidak lebih dari mengelola layanan pertama dan mematikannya ketika sistem dihentikan atau dimatikan, adalah cara yang baik untuk masuk ke House of Horror systemd.

Dunia ingin Anda membersihkan layar Anda.

Ingin tidak untuk menghapus terminal virtual antara log-off dan log-on berikutnya sangat banyak berenang melawan arus, seperti yang telah ditemukan oleh Greg Wooledge dan yang lainnya. Kehadiran keluaran sensitif dari pengguna istimewa, atau bos, yang tersisa setelah log-off telah menjadi masalah keamanan bagi Unices (dan memang sistem operasi akses jarak jauh berbagi waktu lainnya) sejak tahun 1970-an, dan dibutuhkan banyak upaya untuk membatalkan semua hal-hal yang dilakukan orang untuk mencegah masalah ini.

  • Banyak sistem memiliki clear_console perintah dalam skrip logout Shell mereka sebagai standar. (Ini bermasalah dengan sendirinya, karena tidak berfungsi dengan baik dengan program grafis yang berjalan di terminal virtual kernel #1, dan tidak bekerja dengan jenis terminal lain, virtual atau nyata.)

    Perintah ini harus dihapus.

  • Default dalam program getty yang ditujukan untuk terminal virtual, seperti mingetty , adalah untuk menghapus terminal. (Ini dilakukan sebelum log-on, artinya keluaran terminal dapat tetap tidak terhapus jika layanan login TTY dihentikan. Ironisnya, fungsi ini akan lebih baik ditempatkan di login , yang berkat kebutuhan PAM masih berjalan saat log-off.)

    --noclear opsi harus digunakan untuk menonaktifkan ini. Ini melibatkan penulisan satu atau lebih file unit menimpa file, mengubah ExecStart pengaturan, atau cukup arahkan [email protected] di file unit lokal hasil rancangan sendiri.

  • [email protected] yang disediakan oleh systemd kumpulan unit layanan template TTYVTDisallocate=yes yang menginstruksikan systemd untuk menghapus terminal virtual kernel. (Sekali lagi ini tidak berfungsi dengan jenis terminal lain, bahkan terminal virtual ruang pengguna, seperti yang sebagian tercermin dalam namanya.)

    Ini juga harus dihapus, sekali lagi dengan penggantian atau template layanan berbeda yang ditunjukkan oleh [email protected] .

Bacaan lebih lanjut

  • Jonathan de Boyne Pollard (2015). /etc/inittab adalah masa lalu. . Jawaban yang Sering Diberikan.
  • https://unix.stackexchange.com/a/196014/5132
  • Bagaimana menjalankan skrip dengan systemd tepat sebelum dimatikan?
  • Jonathan de Boyne Pollard (2014). Jangan menyalahgunakan su untuk menjatuhkan hak istimewa pengguna. . Jawaban yang Sering Diberikan.
  • Greg Wooledge (2014-04-08). Berhenti Membersihkan Konsol Terkutukku . Wiki Greg.
  • Jonathan de Boyne Pollard (2015-08-22). Sistem membeku dengan beberapa tty di Debian Jessie . [dilindungi email] pengguna debian.
  • https://unix.stackexchange.com/a/194218/5132
  • Jonathan de Boyne Pollard (2015). Rumah Horor sistem . Jawaban yang Sering Diberikan.
Terkait:Penjelasan terperinci yang bagus tentang /etc/network/interfaces sintaks?
Linux
  1. Perbedaan Antara Perintah Ini Untuk Menurunkan Server Linux?

  2. Linux – Bagaimana Cara Mengetahui Jika Suatu Sistem Menggunakan Sysv, Pemula, Atau Systemd Initsystem?

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

  1. Mengembalikan nilai x =os.system(..)

  2. Jadikan layanan pengguna systemd tergantung pada target sistem

  3. Cara mengetahui apakah suatu sistem menggunakan sistem init SysV, Upstart atau Systemd

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

  2. Memperbaiki Sistem belum di-boot dengan systemd sebagai Kesalahan sistem init

  3. Cara Mengubah runlevel/target menggunakan systemd di Ubuntu