2011-07-01 67 views
6

我们遇到的问题是芹菜守护进程非常脆弱。每当我们推送更改时,我们都会使用结构部署脚本来重新启动守护进程,但由于某些原因,这会导致严重问题。芹菜守护进程问题

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

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

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

虽然在这种状态下试图运行celeryd开始出现正常工作,但事实上确实没有。解决此问题的唯一方法是手动终止正在运行的芹菜进程,然后重新启动它们。

任何想法这里发生了什么?我们也没有完整的确认,但我们认为这个问题在几天之后也会发展(没有任何活动,这是一个测试服务器),而没有部署。

+0

我们也使用了一个部署脚本,但没有使用fabric,我们只是从python执行shell命令celeryd restart,并且一切正常。 我知道老版本的Ubuntu的celeryd.sh脚本的一些问题,小于10.10因为bash指令获取运行过程。 在哪个操作系统上运行它?哪个版本的芹菜? –

+0

脚本如何重新启动守护程序?它是否正在发射'kill -9'或类似的东西? –

+0

它触发init.d脚本的停止命令。这是celery的github contrib文件中包含的init.d脚本。它用来触发重新启动,而不是停止然后开始,但我改变了它在黑暗中的镜头。 init.d脚本调用start-stop-daemon命令 – John

回答

5

我不能说我知道你的设置有什么问题,但我总是用supervisord来运行芹菜 - 也许这个问题与新贵有关?无论如何,我从来没有在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 

在我的工厂重新启动脚本是celeryd然后就这么简单发出sudo supervisorctl restart celeryd