芹菜守护进程的问题

时间:2011-07-01 17:15:05

标签: django daemon celery django-celery start-stop-daemon

我们的芹菜守护进程非常脆弱。我们使用结构部署脚本在我们推送更改时重新启动守护程序,但由于某种原因,这会导致大量问题。

每当运行部署脚本时,芹菜进程都处于某种伪死状态。他们(不幸的是)仍然会从rabbitmq中消耗任务,但他们实际上并没有做任何事情。令人困惑的简短检查表明在这种状态下一切似乎都很“好”,celeryctl状态显示一个节点在线并且ps aux | grep celery显示2个正在运行的进程。

但是,尝试运行/etc/init.d/celeryd手动停止会导致以下错误:

start-stop-daemon: warning: failed to kill 30360: No such process

虽然在这种状态下尝试运行celeryd start似乎工作正常,但实际上什么也没做。解决问题的唯一方法是手动杀死正在运行的芹菜进程,然后再次启动它们。

有什么想法在这里发生了什么?我们也没有完全确认,但我们认为问题也会在几天之后(当前没有活动,这是一个测试服务器)在没有部署的情况下自行开发。

1 个答案:

答案 0 :(得分:5)

我不能说我知道你的设置有什么问题,但我总是使用supervisord来运行芹菜 - 也许问题与暴发户有关?无论如何,我从来没有经历过在监督下运行的芹菜。

为了更好的衡量,这里是芹菜的示例主管配置:

[program:celeryd]
directory=/path/to/project/
command=/path/to/project/venv/bin/python manage.py celeryd -l INFO
user=nobody
autostart=true
autorestart=true
startsecs=10
numprocs=1
stdout_logfile=/var/log/sites/foo/celeryd_stdout.log
stderr_logfile=/var/log/sites/foo/celeryd_stderr.log

; Need to wait for currently executing tasks to finish at shutdown.
; Increase this if you have very long running tasks.
stopwaitsecs = 600

在我的fab脚本中重新启动celeryd就像发布sudo supervisorctl restart celeryd一样简单。