Проблемы с демоном сельдерея

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

Всякий раз, когда запускается сценарий развертывания, процессы сельдерея остаются в каком-то псевдомертвом состоянии. Они будут (к сожалению) по-прежнему потреблять задачи от 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 выглядит корректно, но на самом деле ничего не делает. Единственный способ решить эту проблему — вручную убить запущенные процессы сельдерея, а затем запустить их снова.

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


person John    schedule 01.07.2011    source источник
comment
Мы тоже используем сценарий развертывания, но не с тканью, мы просто выполняем команду оболочки celeryd restart из python, и все работает нормально. Я знаю некоторые проблемы сценария celeryd.sh со старой версией Ubuntu, менее 10.10, из-за инструкции bash для запуска процесса. На какой ОС вы его запускаете? Какая версия сельдерея?   -  person Mauro Rocco    schedule 02.07.2011
comment
Как именно ваш скрипт перезапускает демон? Это просто выстрел kill -9 или что-то подобное?   -  person Jack M.    schedule 12.07.2011
comment
Он запускает команду остановки сценария init.d. Это включенный скрипт init.d, доступный в файлах contrib celery на github. Раньше он вызывал перезагрузку вместо остановки, а затем запуска, но я изменил это как выстрел в темноте. Скрипт init.d вызывает команду start-stop-daemon   -  person John    schedule 12.07.2011


Ответы (1)


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

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

[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.

person Idan Gazit    schedule 01.08.2011