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)
我相信停止主管服务会停止主管守护程序,而不是管理您的芹菜工作者的主管流程
supervisorctl stop all 应该允许你停止工人,并允许你启动/重新启动它们
http://supervisord.org/running.html#running-supervisorctl
我最终在这里的原因是,当我使用主管开始和停止我的芹菜加工时,芹菜工人没有停下来,这导致了工人的积累.
我在主管中尝试了各种设置,例如stopsignal和killasgroup.他们都没有阻止工人.
此时,似乎芹菜过程在停止时不向工人发送信号.
我最终做的是添加:
ps auxww | grep 'celery worker' | awk '{print $2}' | xargs kill -9
Run Code Online (Sandbox Code Playgroud)
到我的脚本.这是来自芹菜文档
在这个命令的最后,我尝试杀死-TERM而不是kill -9,希望这会更优雅地杀死进程.但这总是留下一个过程.
| 归档时间: |
|
| 查看次数: |
8709 次 |
| 最近记录: |