【问题标题】:Issues with celery daemon芹菜守护进程的问题
【发布时间】:2011-09-26 22:13:06
【问题描述】:

我们的 celery 守护进程非常不稳定。每当我们推送更改时,我们都会使用结构部署脚本来重新启动守护进程,但由于某种原因,这会导致大量问题。

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

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

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

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

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

【问题讨论】:

  • 我们也使用了部署脚本,但没有使用fabric,我们只是从python执行shell命令celeryd restart,一切正常。我知道 celeryd.sh 脚本与旧版本 ubuntu 的一些问题,小于 10.10,因为 bash 指令用于运行进程。您在哪个操作系统上运行它?哪个版本的芹菜?
  • 您的脚本究竟是如何重新启动守护进程的?它只是触发kill -9 或类似的吗?
  • 触发 init.d 脚本的停止命令。这是 celery 的 github contrib 文件中包含的 init.d 脚本。它曾经触发重新启动而不是停止然后启动,但我将其更改为在黑暗中拍摄。 init.d 脚本调用 start-stop-daemon 命令

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


【解决方案1】:

我不能说我知道你的设置出了什么问题,但我一直使用 supervisord 来运行 celery——也许这个问题与暴发户有关?无论如何,我从来没有遇到过在 supervisord 上运行 celery 的情况。

为了更好的衡量,这里有一个 celery 的示例主管配置:

[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 一样简单。

【讨论】:

    猜你喜欢
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    相关资源
    最近更新 更多