django / celery - статус сельдерея: ошибка: ни один узел не ответил в течение времени

8

Я пытаюсь развернуть простой пример сельдерея на моем рабочем сервере, я следил за учебником на веб-сайте сельдерея о запуске сельдерея в качестве демона http://docs.celeryproject.org/en/latest/tutorials/daemonizing.html#daemonizing, и я получил файл конфигурации в /etc/default/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

Я могу перезапустить сельдерей через celeryd script, представленный в https://github.com/celery/celery/tree/3.0/extra/generic-init.d/

/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

Я знаю, что моя задача была зарегистрирована, потому что я сделал это

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

но кроме того, я ничего не получаю, никакого результата из моей задачи, ошибок в журналах, ничего. Может ли кто-нибудь сказать мне, что может быть неправильно? Ты моя единственная надежда...

Теги:
celery
django-celery

3 ответа

0
Лучший ответ

Я решил свою проблему, это было очень простое решение, но это было также странно: Я сделал это:

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

Я должен был сделать это в этом порядке, иначе я бы получил уродливую ошибку: ни один узел не ответил в течение времени.

  • 0
    Я не думаю, что вам нужны и celerybeat и celeryd . Вы можете запустить celeryd -B , что тоже самое. Мне все еще довольно любопытно, как вы получили service celeryd :) (PS Я до сих пор получаю эту ошибку)
  • 1
    @kave эта ошибка в основном возникает, когда все права доступа к файлам неверны
Показать ещё 5 комментариев
1

Используйте следующую команду, чтобы найти проблему:

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

Это обычно происходит потому, что в исходном проекте есть проблемы (проблемы с разрешениями, синтаксическая ошибка и т.д.).

Как упоминалось в документах сельдерея: -

Если рабочий начинает с "ОК", но выходит почти сразу после этого и в файле журнала ничего нет, тогда, вероятно, есть ошибка но поскольку стандартные выходы демона уже закрыты, вы не будете в состоянии видеть их в любом месте. Для этой ситуации вы можете использовать Переменная среды C_FAKEFORK, чтобы пропустить шаг демонстрации

Удача

Источник: Документы Сельдерей

0

потому что демон сельдерея не может быть запущен. Это одна из причин. Так что любезно перезапустите его, используя python manage.py celeryd --loglevel = INFO

Ещё вопросы

Сообщество Overcoder
Наверх
Меню