其中一个问题,我面对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进程。
Rick Hanlon II在这里遇到了同样的问题:
https://coderwall.com/p/4tcw7w
应该在supervisord的程序部分中设置选项stopasgroup = true,以便不仅停止父进程,而且停止子进程。
示例给出:
[program:some_django] command=python manage.py runserver directory=/dir/to/app stopasgroup=true
另外,记住,你可能有一个较旧的supervisord包没有“stopasgroup”功能。
我在Raspberry Pi上试过这些Debian软件包:
> supervisor_3.0a8不工作。> supervisor_3.0b2-1按预期工作。