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

问题描述 投票:0回答:4

我正在尝试在我的生产服务器中部署一个简单的 celery 示例,我已按照 celery 网站中有关将 celery 作为守护进程运行的教程进行操作 http://docs.celeryproject.org/en/latest/tutorials/daemonizing .html#daemonizing,我在 /etc/default/celeryd

中获取了配置文件
 1 # 要启动的节点名称
  2 # 这里我们有一个节点
  3 CELERYD_NODES=“w1”
  4 # 或者我们可以有三个节点:
  5 #CELERYD_NODES=“w1 w2 w3”
  6 
  7 # 启动时chdir的位置。
  8 CELERYD_CHDIR="/home/audiwime/cidec_sw"
  9 
 10 # 来自环境的Python解释器。
 11 ENV_PYTHON=“/usr/bin/python26”
 12 
 13 # 如何调用“manage.py celeryd_multi”
 14 CELERYD_MULTI="$ENV_PYTHON $CELERYD_CHDIR/manage.py celeryd_multi"
 15 
 16 # # 如何调用“manage.py celeryctl”
 17 CELERYCTL=“$ENV_PYTHON $CELERYD_CHDIR/manage.py celeryctl”
 18 
 19 # celeryd 的额外参数
 20 CELERYD_OPTS="--time-limit=300 --concurrency=8"
 21 
 22 # celery 配置模块的名称。
 23 CELERY_CONFIG_MODULE=“celeryconfig”
 24 
 25 # %n 将被替换为节点名。
 26 CELERYD_LOG_FILE=“/var/log/celery/%n.log”
 27 CELERYD_PID_FILE=“/var/run/celery/%n.pid”
 28 
 29 # Workers 应该以非特权用户身份运行。
 30 CELERYD_USER=“audiwime”
 31 CELERYD_GROUP=“audiwime”
 32 
 33 导出 DJANGO_SETTINGS_MODULE="cidec_sw.settings"

但是如果我跑步

芹菜状态

在终端中,我得到了这样的回复:

错误:没有节点在时间限制内回复

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

中提供的celeryd脚本重新启动celery
 /etc/init.d/celeryd 重新启动
celeryd-multi v3.0.12(Chiastic Slide)
> w1.one.cloudwime.com:已关闭
> 重新启动节点 w1.one.cloudwime.com:好的

我可以运行

python26 manage.py celeryd -l info
并且我在django中的任务运行良好,但是如果我让守护进程完成其工作,我不会得到任何结果,甚至在/var/log/celery/w1.log中也没有错误

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

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>}

但除此之外,我什么也没得到,我的任务没有结果,日志中没有错误,什么也没有。 可能出什么问题了?

python django celery django-celery
4个回答
2
投票

使用以下命令来查找问题:

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

发生这种情况通常是因为源项目存在问题(权限问题、语法错误等)

如 celery 文档中所述:-

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

祝你好运

来源:Celery 文档


0
投票

这是因为 celery 守护进程可能未启动。这是原因之一。因此,请使用 python manage.py celeryd --loglevel=INFO

重新启动它

0
投票

问题: Celery

status
命令显示“没有节点在时间限制内回复”。我该如何解决这个问题?

答案:

我遇到了这个问题,并通过重新启动 Celery 服务解决了它。这对我有用:

  1. 重启Celery服务:

    sudo service celery restart
    
  2. 再次检查状态:

    celery -A prototype.celeryapp:celery_app status
    

此后,该命令显示了在线工作人员的正确输出:

-> celery@az-sand-app-1: OK
-> celery@CeleryWorker-1: OK
2 nodes online.

这解决了问题。确保您的消息代理正在运行并且没有网络问题。


-3
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.