django / celery - celery状态:错误:没有节点在时间限制内回复

时间:2012-11-27 00:46:19

标签: python django celery django-celery

我正在尝试在我的生产服务器中部署一个简单的芹菜示例,我已经按照celery网站上关于运行celery as daemon http://docs.celeryproject.org/en/latest/tutorials/daemonizing.html#daemonizing的教程,我在中获得了配置文件的/ etc /默认/ celeryd

  1 # Name of nodes to start
  2 # here we have a single node
  3 CELERYD_NODES="w1"
  4 # or we could have three nodes:
  5 #CELERYD_NODES="w1 w2 w3"
  6 
  7 # Where to chdir at start.
  8 CELERYD_CHDIR="/home/audiwime/cidec_sw"
  9 
 10 # Python interpreter from environment.
 11 ENV_PYTHON="/usr/bin/python26"
 12 
 13 # How to call "manage.py celeryd_multi"
 14 CELERYD_MULTI="$ENV_PYTHON $CELERYD_CHDIR/manage.py celeryd_multi"
 15 
 16 # # How to call "manage.py celeryctl"
 17 CELERYCTL="$ENV_PYTHON $CELERYD_CHDIR/manage.py celeryctl"
 18 
 19 # Extra arguments to celeryd
 20 CELERYD_OPTS="--time-limit=300 --concurrency=8"
 21 
 22 # Name of the celery config module.
 23 CELERY_CONFIG_MODULE="celeryconfig"
 24 
 25 # %n will be replaced with the nodename.
 26 CELERYD_LOG_FILE="/var/log/celery/%n.log"
 27 CELERYD_PID_FILE="/var/run/celery/%n.pid"
 28 
 29 # Workers should run as an unprivileged user.
 30 CELERYD_USER="audiwime"
 31 CELERYD_GROUP="audiwime"
 32 
 33 export DJANGO_SETTINGS_MODULE="cidec_sw.settings"

但如果我跑

celery status

在终端,我得到了这个回复:

Error: No nodes replied within time constraint

我可以通过https://github.com/celery/celery/tree/3.0/extra/generic-init.d/

中提供的celeryd脚本重启芹菜
/etc/init.d/celeryd restart
celeryd-multi v3.0.12 (Chiastic Slide)
> w1.one.cloudwime.com: DOWN
> Restarting node w1.one.cloudwime.com: OK

我可以跑

python26 manage.py celeryd -l info

并且我在django中的任务运行正常,但是如果我让守护进程完成其工作我没有得到任何结果,甚至在 /var/log/celery/w1.log <中都没有错误/ p>

我知道我的任务已经注册,因为我这样做了

from celery import current_app
def call_celery_delay(request):
    print current_app.tasks
    run.delay(request.GET['age'])
    return HttpResponse(content="celery task set",content_type="text/html")

我得到一本字典,我的任务出现了

{'celery.chain': <@task: celery.chain>, 'celery.chunks': <@task: celery.chunks>, 'celery.chord': <@task: celery.chord>, 'tasks.add2': <@task: tasks.add2>, 'celery.chord_unlock': <@task: celery.chord_unlock>, **'tareas.tasks.run': <@task: tareas.tasks.run>**, 'tareas.tasks.add': <@task: tareas.tasks.add>, 'tareas.tasks.test_two_minute': <@task: tareas.tasks.test_two_minute>, 'celery.backend_cleanup': <@task: celery.backend_cleanup>, 'celery.map': <@task: celery.map>, 'celery.group': <@task: celery.group>, 'tareas.tasks.test_one_minute': <@task: tareas.tasks.test_one_minute>, 'celery.starmap': <@task: celery.starmap>}

但除此之外我没有得到任何其他结果,我的任务没有结果,日志中没有错误,没有。 谁能告诉我什么可能是错的? 你是我唯一的希望......

3 个答案:

答案 0 :(得分:1)

使用以下命令查找问题:

C_FAKEFORK=1 sh -x /etc/init.d/celeryd start

这通常是因为源项目中存在问题(权限问题,语法错误等)

如芹菜文档中所述: -

  

如果工人以“OK”开始,但几乎立即退出   并且日志文件中没有任何内容,则可能存在错误   但由于守护进程标准输出已经关闭,你不会   能够在任何地方看到它们。对于这种情况,你可以使用   C_FAKEFORK环境变量跳过守护步骤

祝你好运

来源:Celery Docs

答案 1 :(得分:0)

因为celery守护程序可能无法启动。这是一个原因。所以请使用python manage.py celeryd --loglevel = INFO

重新启动它

答案 2 :(得分:-2)

我解决了我的问题,这是一个非常简单的解决方案,但它也是一个奇怪的解决方案: 我做的是:

$ /etc/init.d/celerybeat restart
$ /etc/init.d/celeryd restart
$ service celeryd restart

我必须按顺序执行此操作,否则我会得到一个丑陋的错误:没有节点在时间限制内回复。