Saya mencari cara standar atau praktik terbaik untuk menjaga daemon dimulai dengan init.d
skrip shell tetap hidup.
Atau bahkan lebih baik, adakah cara untuk mempertahankannya langsung dari /etc/init.d
?
Secara khusus, saya memiliki daemon bernama dtnd with dan infinite loop yang mencari proses akhir yang tidak terduga, jika ada, daemon membangunkan mereka lagi. Juga, saya menggunakan alat start-stop-daemon untuk membiarkan presed dijalankan dari pengguna sistem yang diberikan.
Saya ingin menjalankan daemon dtnd ini dari startup. Untuk mencapai perilaku ini, saya membuat skrip init.d yang "membungkus" file dtnd menggunakan perintah start, stop dan status.
Saya punya 2 pertanyaan yang ingin saya pecahkan:
Apakah ada cara untuk tetap mempertahankan beberapa proses dari skrip init.d shell. Apakah praktik standar / cara terbaik?
Dianjurkan untuk menjaga proses tetap hidup dengan loop tak terbatas? Saya kira lebih baik menggunakan beberapa perintah
respawn
untuk mencapai itu. Itu benar?
Saya tahu tentang keberadaan respawn
perintah. Saya pikir itulah yang saya butuhkan tetapi saya tidak mengerti alur kerja antara /etc/init.d/
dan /etc/init
. Ada yang bisa bantu saya?
Perhatikan bahwa saya tidak memiliki inittab tidak kaya baru (saya hanya diizinkan untuk digunakan /etc/init
, /etc/init.d
, cron
dan alat-alat sistem seperti start-stop-daemon
. Maksudku, hanya alat default)
Terima kasih banyak atas waktunya!
Jawaban:
Debian akhirnya akan memiliki systemd, jadi ini adalah cara untuk melakukannya pada sistem Linux yang menggunakan systemd (dan banyak yang sudah melakukannya; Anda mungkin mempertimbangkan untuk berpindah distribusi).
Systemd dapat menangani menjaga layanan tetap hidup untuk Anda secara otomatis; tidak diperlukan alat lain. Cukup pastikan itu
Restart=always
diatur di bagian file layanan[Service]
.Beberapa opsi lain juga tersedia, untuk skenario yang lebih kompleks.
sumber
systemd
tampaknya membuanginit.d
skrip & basis pada*.service
systemctl edit myservice
, lalusystemctl daemon-reload
dan restart layanan saya.Anda dapat menambahkannya
/etc/inittab
denganrespawn
:Ini peretasan yang kotor, tapi saya pernah menggunakannya dengan sukses pada sistem sysv-init lama.
sumber
Nah, itulah salah satu alasan utama, mengapa debian pindah ke systemd.
sysvinit (/etc/init.d) tidak dapat mendeteksi, jika layanan tidak aktif / tidak merespons. Ini berarti Anda harus memantau layanan ini dan meningkat jika layanan tidak akan melakukan pekerjaannya lagi.
mungkin hal termudah untuk dilakukan adalah bermigrasi ke daemonhandler lain seperti systemd (default di RHEL7, akan menjadi default di debian dan ubuntu lts berikutnya), pemula (default di RHEL6, Ubuntu 12.04 dan 14.04), daemontools (seperti disebutkan, dikembangkan oleh djb) atau yang lainnya.
melakukan pekerjaan mempertahankan layanan tetap hidup adalah PITA di sysvinit.
sumber
Praktik terbaik adalah memastikan bahwa dasmon Anda TIDAK BERHENTI sejak awal.
Gagal Anda mungkin ingin melihat daemontools DJB
sumber
Pendekatan standar bagi saya adalah dengan menggunakan utilitas Monit untuk ini.
Saya tidak tahu dari deskripsi Anda jika Anda telah menulis sesuatu seperti Monit dan berusaha memastikan itu berjalan, atau jika Anda perlu sesuatu untuk menonton daemon yang Anda buat.
sumber