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 设置,带有 celeryd
和 celerybeat
守护进程和 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”的情况下使用 Django+Celery 进行开发?