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 dilogin
, 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, mengubahExecStart
pengaturan, atau cukup arahkan[email protected]
di file unit lokal hasil rancangan sendiri. [email protected]
yang disediakan oleh systemd kumpulan unit layanan templateTTYVTDisallocate=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.