Я пытаюсь развернуть простой пример сельдерея на моем рабочем сервере, я следил за учебником на веб-сайте сельдерея о запуске сельдерея в качестве демона 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>}
но кроме того, я ничего не получаю, никакого результата из моей задачи, ошибок в журналах, ничего. Может ли кто-нибудь сказать мне, что может быть неправильно? Ты моя единственная надежда...
Я решил свою проблему, это было очень простое решение, но это было также странно: Я сделал это:
$ /etc/init.d/celerybeat restart
$ /etc/init.d/celeryd restart
$ service celeryd restart
Я должен был сделать это в этом порядке, иначе я бы получил уродливую ошибку: ни один узел не ответил в течение времени.
Используйте следующую команду, чтобы найти проблему:
C_FAKEFORK=1 sh -x /etc/init.d/celeryd start
Это обычно происходит потому, что в исходном проекте есть проблемы (проблемы с разрешениями, синтаксическая ошибка и т.д.).
Как упоминалось в документах сельдерея: -
Если рабочий начинает с "ОК", но выходит почти сразу после этого и в файле журнала ничего нет, тогда, вероятно, есть ошибка но поскольку стандартные выходы демона уже закрыты, вы не будете в состоянии видеть их в любом месте. Для этой ситуации вы можете использовать Переменная среды C_FAKEFORK, чтобы пропустить шаг демонстрации
Удача
Источник: Документы Сельдерей
потому что демон сельдерея не может быть запущен. Это одна из причин. Так что любезно перезапустите его, используя python manage.py celeryd --loglevel = INFO
celerybeat
иceleryd
. Вы можете запуститьceleryd -B
, что тоже самое. Мне все еще довольно любопытно, как вы получилиservice celeryd
:) (PS Я до сих пор получаю эту ошибку)