Одна из проблем, с которыми я сталкиваюсь с 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
. Поэтому, когда я запускаю это из супервизора и пытаюсь остановить его из supervisorctl, только процесс верхнего уровня убивается, но не действительный процесс Java.