Одна из проблем, с которыми я сталкиваюсь при работе с supervisord, заключается в том, что когда у меня есть команда, которая, в свою очередь, порождает другой процесс, supervisord не может его убить.
Например, у меня есть процесс Java, который при нормальном запуске похож на
$ 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
Файл конфигурации супервизора выглядит так:
[program:zookeeper]
command=zkServer.sh start-foreground
autorestart=true
stopsignal=KILL
Процессы такого типа, которые имеют несколько дочерних процессов, плохо обрабатываются супервизором, когда дело доходит до их остановки из supervisorctl
. Поэтому, когда я запускаю это из supervisord и пытаюсь остановить его из supervisorctl, уничтожается только процесс верхнего уровня, но не фактический процесс Java.
systemd
init
-замена используетcgroups
позволяет надежно отслеживать дочерние процессы. Возможно, он подойдет для ваших нужд. - person sarnold   schedule 01.02.2012