sfondo
Mi è stato chiesto di creare uno systemdscript per un nuovo servizio, foo_daemonche 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.servicesystemctl stop foo_daemon.servicesystemctl restart foo_daemon.service
Problema
A volte, a causa del foo_daemoncattivo stato, dobbiamo ucciderlo forzatamente tramite:
systemctl kill -s KILL foo_daemon.service
Domanda
Come posso impostare il mio systemdscript in foo_daemonmodo che, ogni volta che un utente tenta di arrestare / riavviare il servizio, systemdpossa:
- Tentare un arresto graduale di
foo_daemonviaSIGTERM. - Dare fino a 2 secondi per il completamento dell'arresto / chiusura
foo_daemon. - Tentare un arresto forzato della
foo_daemonviaSIGKILL, se il processo è ancora in vita (in modo da non abbiamo il rischio che la PID essere riciclati esystemdproblemiSIGKILLcontro 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
SIGKILLcontro il processo 'PID senza preoccuparsi di uccidere un PID riciclato.