停止主管不会阻止芹菜工人

Cer*_*rin 16 python supervisord django-celery

当我停止Supervisord时,如何确保子流程停止?

我正在使用Supervisord来管理两名芹菜工人.每个工作人员的命令是:

command=/usr/local/myapp/src/manage.py celery worker --concurrency=1 --loglevel=INFO
Run Code Online (Sandbox Code Playgroud)

当我开始监督时,它们运行得很好,但是当我跑步时sudo service supervisord stop,它报告我的工人停止:

celery_1: stopped
celery_2: stopped
Run Code Online (Sandbox Code Playgroud)

但是,当我跑步时,ps aux | grep celery我看到它们仍在运行:

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
Run Code Online (Sandbox Code Playgroud)

dm0*_*514 8

我相信停止主管服务会停止主管守护程序,而不是管理您的芹菜工作者的主管流程

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

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

  • 主管发送给芹菜工人的信号不会立即杀死他们,如果他们仍在处理任务,他们将继续运行直到完成这些任务.因此,即使在调用"supervisorctl stop all"之后,您的工作人员也可能需要很长时间才能关闭 (3认同)

Chu*_*uck 6

我最终在这里的原因是,当我使用主管开始和停止我的芹菜加工时,芹菜工人没有停下来,这导致了工人的积累.

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

此时,似乎芹菜过程在停止时不向工人发送信号.

我最终做的是添加:

ps auxww | grep 'celery worker' | awk '{print $2}' | xargs kill -9
Run Code Online (Sandbox Code Playgroud)

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

在这个命令的最后,我尝试杀死-TERM而不是kill -9,希望这会更优雅地杀死进程.但这总是留下一个过程.