Latar Belakang
Saya diminta untuk membuat systemdskrip untuk layanan baru foo_daemon,, yang terkadang masuk ke "kondisi buruk", dan tidak akan mati melalui SIGTERM(kemungkinan karena penangan sinyal khusus). Ini bermasalah bagi pengembang, karena mereka diperintahkan untuk memulai / menghentikan / memulai kembali layanan melalui:
systemctl start foo_daemon.servicesystemctl stop foo_daemon.servicesystemctl restart foo_daemon.service
Masalah
Terkadang, karena foo_daemonmasuk ke kondisi buruk, kita harus membunuhnya secara paksa melalui:
systemctl kill -s KILL foo_daemon.service
Pertanyaan
Bagaimana saya dapat mengatur systemdskrip saya foo_daemonsehingga, setiap kali pengguna mencoba menghentikan / memulai kembali layanan, systemdakan:
- Mencoba shutdown
foo_daemonviaSIGTERM. - Berikan hingga 2 detik untuk shutdown / terminasi
foo_daemonhingga selesai. - Coba shutdown paksa
foo_daemonmelaluiSIGKILLjika proses masih hidup (jadi kami tidak memiliki risiko PID didaur ulang dansystemdmasalahSIGKILLterhadap PID yang salah). Perangkat yang kami uji memunculkan / memalsukan banyak proses dengan cepat, sehingga ada kekhawatiran yang jarang namun sangat nyata tentang daur ulang PID yang menyebabkan masalah. - Jika, dalam praktiknya, saya hanya menjadi paranoid tentang daur ulang PID, saya setuju dengan skrip yang hanya
SIGKILLmenentang proses PID tanpa khawatir akan membunuh PID daur ulang.