Проблемы с демоном сельдерея - PullRequest
6 голосов
/ 01 июля 2011

У нас проблемы с нашим демоном сельдерея, который очень ненадежен. Мы используем сценарий развертывания фабрики, чтобы перезапустить демон всякий раз, когда мы вносим изменения, но по какой-то причине это вызывает серьезные проблемы.

Каждый раз, когда запускается скрипт развертывания, процессы сельдерея остаются в каком-то псевдо-мертвом состоянии. Они (к сожалению) будут по-прежнему потреблять задания от rabbitmq, но на самом деле они ничего не будут делать. Смущает, что краткая проверка показала бы, что в этом состоянии все кажется «в порядке», состояние celeryctl показывает один узел в сети, а ps aux | grep celery показывает 2 запущенных процесса.

Однако попытка запустить /etc/init.d/celeryd stop вручную приводит к следующей ошибке:

start-stop-daemon: warning: failed to kill 30360: No such process

Хотя в этом состоянии попытка запустить celeryd start, кажется, работает правильно, но на самом деле ничего не делает. Единственный способ решить эту проблему - вручную убить запущенные процессы сельдерея и запустить их снова.

Есть идеи, что здесь происходит? У нас также нет полного подтверждения, но мы думаем, что проблема также развивается через несколько дней (без активности, это тестовый сервер) самостоятельно без развертывания.

1 Ответ

5 голосов
/ 01 августа 2011

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

Для примера, вот пример конфигурации супервизора для сельдерея:

[program:celeryd]
directory=/path/to/project/
command=/path/to/project/venv/bin/python manage.py celeryd -l INFO
user=nobody
autostart=true
autorestart=true
startsecs=10
numprocs=1
stdout_logfile=/var/log/sites/foo/celeryd_stdout.log
stderr_logfile=/var/log/sites/foo/celeryd_stderr.log

; Need to wait for currently executing tasks to finish at shutdown.
; Increase this if you have very long running tasks.
stopwaitsecs = 600

Перезапустить celeryd в моем потрясающем скрипте так же просто, как выдать sudo supervisorctl restart celeryd.

...