Rabbitmq celeryd celerybeat 没有在生产中作为守护进程执行任务

Posted

技术标签:

【中文标题】Rabbitmq celeryd celerybeat 没有在生产中作为守护进程执行任务【英文标题】:Rabbitmq celeryd celerybeat not executing tasks in production as Daemon 【发布时间】:2011-11-15 03:25:51 【问题描述】:

上周,我在本地开发人员上测试了 RabbitMQ 和 Celery,并且一切正常。

我感觉我的任务没有在生产环境中执行,因为我还有大约 1200 个任务在队列中。

我运行 CentOS 5.4 设置,带有 celerydcelerybeat 守护进程和 WSGI 我已经导入到 wsgi 模块。

当我运行时,/etc/init.d/celeryd start 我得到以下响应

[root@myvm myproject]# /etc/init.d/celeryd start
celeryd-multi v2.3.1
> Starting nodes...
    > w1.myvm.centos01: OK

当我运行 /etc/init.d/celerybeat start 时,我得到以下响应

[root@myvm fundedmyprojectbyme]# /etc/init.d/celerybeat start
Starting celerybeat...

因此,从输出看来,这些项目似乎已成功执行 - 尽管在查看队列时,它们似乎只得到了比执行更多的东西。

现在,如果我执行相同的执行,但使用 django 的 manage.py 而不是 ./manage.py celeryd./manage.py celerybeat,任务会立即开始处理。

我的/etc/default/celeryd

# Where to chdir at start.
CELERYD_CHDIR="/www/myproject/"

# How to call "manage.py celeryd_multi"
CELERYD_MULTI="$CELERYD_CHDIR/manage.py celeryd_multi"

# Extra arguments to celeryd
CELERYD_OPTS="--time-limit=300 --concurrency=8"

# Name of the celery config module.
CELERY_CONFIG_MODULE="celeryconfig"

# %n will be replaced with the nodename.
CELERYD_LOG_FILE="/var/log/celery/%n.log"
CELERYD_PID_FILE="/var/run/celery/%n.pid"

# Workers should run as an unprivileged user.
CELERYD_USER="celery"
CELERYD_GROUP="celery"

# Name of the projects settings module.
export DJANGO_SETTINGS_MODULE="settings"

我的/etc/default/celerybeat

# Where the Django project is.
CELERYD_CHDIR="/www/myproject/"

# Name of the projects settings module.
export DJANGO_SETTINGS_MODULE="settings"

# Path to celeryd
CELERYD="/www/myproject/manage.py celeryd"

# Path to celerybeat
CELERYBEAT="/www/myproject/manage.py celerybeat"

# Extra arguments to celerybeat
CELERYBEAT_OPTS="--schedule=/var/run/celerybeat-schedule"

我的 /celeryd 和 /celerybeat 的 /etc/init.d 文件基于 generic scripts

我是否遗漏了部分配置???

【问题讨论】:

也许阅读你的 init 脚本应该在 /var/log/ 上创建的日志会很有用,如果有时没有创建日志是因为 celery 在创建日志文件时有问题。你的生产系统和你的本地系统有什么区别?你确定他们有相同的python版本吗? 【参考方案1】:

我曾经遇到过一种情况,我必须将“python”作为前缀添加到 CELERYD_MULTI 变量中。

# How to call "manage.py celeryd_multi"
CELERYD_MULTI="python $CELERYD_CHDIR/manage.py celeryd_multi"

无论出于何种原因,我的 manage.py 脚本都无法正常执行(即使我有 chmod +x 并正确配置了我的 shebang。)你可以试试这个看看它是否有效。

【讨论】:

【参考方案2】:

尝试运行以下命令,看看输出告诉你什么:

sh -x /etc/init.d/celeryd start 

在我的情况下,对于运行 celery 的用户,/var/log 存在一些权限问题

【讨论】:

以上是关于Rabbitmq celeryd celerybeat 没有在生产中作为守护进程执行任务的主要内容,如果未能解决你的问题,请参考以下文章

Celeryd时间限制错误

在不运行“celeryd”的情况下使用 Django+Celery 进行开发?

Celeryd - 发送有关日志级别错误及以上的电子邮件

无法启动 celeryd - 错误:冲突的选项字符串:--no-color

为django项目配置celery的后台启动

芹菜自动重载不起作用