Одна из проблем, с которой я сталкиваюсь при работе с 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
Конфигурационный файл supervisord выглядит так:
[program:zookeeper]
command=zkServer.sh start-foreground
autorestart=true
stopsignal=KILL
Такие процессы, имеющие несколько дочерних, не очень хорошо обрабатываются supervisord, когда дело доходит до их остановки с помощью supervisorctl
. Поэтому, когда я запускаю этот процесс из supervisord и пытаюсь остановить его из supervisorctl, убивается только процесс верхнего уровня, но не сам процесс java.