Je veux avoir un script runit
( stop runsv
) personnalisé à exécuter lorsque je dois arrêter / redémarrer le processus. Actuellement, il tue simplement le processus, puis exécute le script "finish". Mais dans mon cas, mon processus génère dynamiquement des processus enfants, donc au lieu de simples kill
, j'ai besoin d'un "killtree"
pour les supprimer. Comment je fais ça?
Je sais que cela devrait être fait via les control
options de runit, mais à la lecture des documents, je ne sais pas vraiment comment le script d'arrêt doit être nommé :(
Réponses:
À partir des documents
Cela signifie que vous devez créer un
service_name/control/X
, X étant un exécutable qui s'exécutera lorsque vous enverrez lasv
commande associée au service, comme lad
commande (vers le bas). Si votre script se termine avec le statut 0, il n'essaiera pas d'arrêter le service lui-même.Fondamentalement, vous avez besoin d'un script exécutable
/etc/sv/<service>/control/d
qui fera ce que vous voulez et tuera le service, nettoiera les pids, etc.la source
La réponse simple est de nommer votre script de nettoyage "service / finish". Ce script est exécuté lorsque "service / run" se termine.
Il existe également une interface "service / contrôle / ctrl_char. Elle vous permet d'effectuer différentes actions selon la commande que vous envoyez à runsv.
la source
J'ai dû résoudre ce problème moi-même pour docker. J'ai eu un serveur uwsgi en cours d'exécution, et il a été envoyé le mauvais signal par docker (TERM au lieu d'INT) lors de l'arrêt du conteneur.
L'idée des fichiers control / x est de réagir à un signal reçu. Dans mon cas, je placerais un
t
fichier pour le signal de terminaison sous contrôle, car c'est le fichier réservé au signal de terme. Le script doit être exécutable.Le script envoie un signal int au processus uwsgi, ce que je veux.
Si le script de contrôle se termine sans erreur (code retour 0), le signal d'origine ne sera pas envoyé au processus.
Ainsi, dans mon cas, j'ai pu recevoir le terme signal et envoyer un signal int au processus de service à la place.
la source