Contexte
On m'a demandé de créer un systemd
script pour un nouveau service, foo_daemon
qui se met parfois dans un "mauvais état" et ne mourra pas SIGTERM
(probablement à cause du gestionnaire de signal personnalisé). Cela est problématique pour les développeurs, car ils sont invités à démarrer / arrêter / redémarrer le service via:
systemctl start foo_daemon.service
systemctl stop foo_daemon.service
systemctl restart foo_daemon.service
Problème
Parfois, en raison d' foo_daemon
un mauvais état, nous devons le tuer de force via:
systemctl kill -s KILL foo_daemon.service
Question
Comment puis-je configurer mon systemd
script pour foo_daemon
que, chaque fois qu'un utilisateur tente d'arrêter / redémarrer le service systemd
:
- Essayez d'arrêter gracieusement le
foo_daemon
viaSIGTERM
. - Accordez jusqu'à 2 secondes pour que l'arrêt / l'arrêt
foo_daemon
se termine. - Essayez d'arrêter forcé
foo_daemon
viaSIGKILL
si le processus est toujours en cours (nous n'avons donc pas de risque de recyclage du PID et desystemd
problèmeSIGKILL
avec le mauvais PID). L'appareil que nous testons génère / accélère de nombreux processus rapidement, il existe donc une préoccupation rare mais très réelle concernant le recyclage du PID, qui pose problème. - Si, dans la pratique, je suis juste paranoïaque à propos du recyclage des PID, je suis d'accord avec le script qui vient d'être émis
SIGKILL
contre le PID du processus sans se soucier de tuer un PID recyclé.