L'un des problèmes que je rencontre avec le superviseur est que lorsque j'ai une commande qui engendre à son tour un autre processus, le superviseur n'est pas en mesure de le tuer.
Par exemple, j'ai un processus Java qui, lorsqu'il s'exécute normalement, est comme
$ zkServer.sh start-foreground
$ ps -eaf | grep zk
user 30404 28280 0 09:21 pts/2 00:00:00 bash zkServer.sh start-foreground
user 30413 30404 76 09:21 pts/2 00:00:10 Java -Dzookeeper.something..something
Le fichier de configuration de supervord ressemble à:
[program:zookeeper]
command=zkServer.sh start-foreground
autorestart=true
stopsignal=KILL
Ce type de processus qui ont plusieurs enfants n'est pas bien géré par supervord quand il s'agit de les arrêter de supervisorctl
. Ainsi, lorsque j'exécute cela à partir de supervisord et que j'essaie de l'arrêter à partir de supervisorctl, seul le processus de niveau supérieur est tué, mais pas le processus Java Java réel).
Le même problème a été rencontré par Rick Hanlon II ici: https://coderwall.com/p/4tcw7w
L'option stopasgroup = true doit être définie dans la section programme pour que supervord arrête non seulement le processus parent mais aussi les processus enfants.
L'exemple est donné comme suit:
[program:some_Django]
command=python manage.py runserver
directory=/dir/to/app
stopasgroup=true
Gardez également à l'esprit que vous pouvez avoir un ancien package de supervord qui n'a pas de fonctionnalité "stopasgroup". J'ai essayé ces paquets Debian sur Raspberry Pi:
Une fonction a récemment été ajoutée à supervisord pour envoyer SIGKILL à l'ensemble du groupe de processus. C'est dans github mais pas encore officiellement publié.
Si l'ID de processus est disponible dans un fichier, vous pouvez utiliser le programme pid-proxy
L'article suivant présente une discussion approfondie du problème:
http://veithen.github.io/2014/11/16/sigterm-propagation.html
essayez cette configuration de programme de superviseur:
stopasgroup=true
killasgroup=true
stopsignal=INT
Vous pouvez également utiliser des priorités dans /conf.d/your-configuration.conf
fichier. Par exemple, si vous voulez d'abord exécuter zookeeper puis kafka vous pouvez spécifier deux programmes.
Une priorité inférieure signifie que le programme démarre en premier et s'arrête en dernier.