sfondo
Mi è stato chiesto di creare uno systemd
script per un nuovo servizio, foo_daemon
che a volte entra in "cattivo stato" e non morirà via SIGTERM
(probabilmente a causa del gestore di segnale personalizzato). Ciò è problematico per gli sviluppatori, in quanto sono tenuti ad avviare / arrestare / riavviare il servizio tramite:
systemctl start foo_daemon.service
systemctl stop foo_daemon.service
systemctl restart foo_daemon.service
Problema
A volte, a causa del foo_daemon
cattivo stato, dobbiamo ucciderlo forzatamente tramite:
systemctl kill -s KILL foo_daemon.service
Domanda
Come posso impostare il mio systemd
script in foo_daemon
modo che, ogni volta che un utente tenta di arrestare / riavviare il servizio, systemd
possa:
- Tentare un arresto graduale di
foo_daemon
viaSIGTERM
. - Dare fino a 2 secondi per il completamento dell'arresto / chiusura
foo_daemon
. - Tentare un arresto forzato della
foo_daemon
viaSIGKILL
, se il processo è ancora in vita (in modo da non abbiamo il rischio che la PID essere riciclati esystemd
problemiSIGKILL
contro il PID sbagliato). Il dispositivo che stiamo testando genera / procede rapidamente a numerosi processi, quindi esiste una preoccupazione rara ma molto reale sul riciclaggio del PID che causa un problema. - Se, in pratica, sono solo paranoico sul riciclaggio dei PID, sto bene con lo script che emette solo
SIGKILL
contro il processo 'PID senza preoccuparsi di uccidere un PID riciclato.