Contexte
On m'a demandé de créer un systemdscript pour un nouveau service, foo_daemonqui 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.servicesystemctl stop foo_daemon.servicesystemctl restart foo_daemon.service
Problème
Parfois, en raison d' foo_daemonun mauvais état, nous devons le tuer de force via:
systemctl kill -s KILL foo_daemon.service
Question
Comment puis-je configurer mon systemdscript pour foo_daemonque, chaque fois qu'un utilisateur tente d'arrêter / redémarrer le service systemd:
- Essayez d'arrêter gracieusement le
foo_daemonviaSIGTERM. - Accordez jusqu'à 2 secondes pour que l'arrêt / l'arrêt
foo_daemonse termine. - Essayez d'arrêter forcé
foo_daemonviaSIGKILLsi le processus est toujours en cours (nous n'avons donc pas de risque de recyclage du PID et desystemdproblèmeSIGKILLavec 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
SIGKILLcontre le PID du processus sans se soucier de tuer un PID recyclé.