18

How do I ensure sub-processes are stopped when I stop Supervisord?

I'm using Supervisord to run two Celery workers. The command for each worker is:

command=/usr/local/myapp/src/manage.py celery worker --concurrency=1 --loglevel=INFO

When I start supervisord, they run perfectly, but when I run sudo service supervisord stop, it reports my workers stop:

celery_1: stopped
celery_2: stopped

However, when I run ps aux | grep celery I see they're still running:

www-data 27667  0.0  1.5 318420 64360 ?        S    10:45   0:00 manage.py celery worker --concurrency=1 --loglevel=INFO
www-data 27668  0.0  1.5 318420 318416 ?        S    10:45   0:00 manage.py celery worker --concurrency=1 --loglevel=INFO
4

5 回答 5

10

我相信停止主管服务会停止主管守护进程,而不是管理 celeryworkers 的主管进程

supervisorctl stop all应该允许您停止工作人员,并允许您启动/重新启动它们

http://supervisord.org/running.html#running-supervisorctl

于 2013-06-12T15:29:57.310 回答
9

我最终来到这里的原因是,当我使用主管启动和停止我的 celery 进程时,celery 工人没有停止,这导致工人堆积。

我在supervisor中尝试了各种设置,例如stopsignal和killasgroup。他们都没有阻止工人。

此时,celery 进程在停止时似乎没有向工作人员发送信号。

我最终做的是添加:

ps auxww | grep 'celery worker' | awk '{print $2}' | xargs kill -9

到我的脚本。这是来自芹菜文档

在这个命令结束时,我尝试了 kill -TERM 而不是 kill -9,希望这样可以更优雅地终止进程。但这总是留下一个过程。

于 2015-01-26T14:48:15.197 回答
1

查看您的 supervisord.log。也许supervisord正在向芹菜发送SIGKILL?如果是,请尝试增加超时时间(例如 stopwaitsecs=600)。

https://github.com/celery/celery/issues/102

于 2013-11-15T13:53:45.693 回答
1

不确定,但在这种情况下,主管正在管理 sh 脚本。不是python线程。你能ps auxf | grep celery在 supervisord 运行时显示 , 吗?可能正在编辑命令,例如:command=python /path/to/manage.py ...,会有所帮助。

于 2013-06-12T15:41:43.397 回答
1

我在 django 频道上遇到过此类问题,stopasgroup=true主管配置中的设置(如此处所建议)解决了该问题。但是,我不明白为什么。

于 2016-11-28T11:30:55.607 回答