Назад | Перейти на главную страницу

kill -HUP не работает с демоном сельдерея

Итак, у меня есть сценарий оболочки, который демонизирует сельдерей и создает группу рабочих, работающих как демон. Я хотел бы иметь способ перезапустить задачу сельдерея, когда базовый источник изменяется с момента --autoreload вариант не работает.

Согласно моему прочтению документов о сельдерее, kill -HUP $pid убьет демонизированный процесс сельдерея, а затем создаст новый с теми же аргументами. Однако, когда я его пробую, сельдерей идет вниз и больше не возвращается. Что-то не так с моей командой? Может ли сельдерей работать в фоновом режиме при запуске (и если это так, куда мне пойти, чтобы выяснить, что не так, и посмотреть вывод журнала)?

Буквальная команда kill -HUP \`cat /var/run/celery/w1.pid\`. Проверка ps aux | grep celery ничего не возвращает. После того, как я отправил сигнал уничтожения, файл журнала не выводится.

Любые идеи?

Обработчик HUP в Celery просто запускает процедуру завершения работы и вызывает execv с теми же аргументами, что и процесс, запущенный при завершении. Это довольно наивный способ, поскольку он не может знать, вернется ли он снова, но мы еще не нашли лучшего решения, которое работает в обработчике сигналов.

Если вы используете celery multi тогда лучше использовать celery multi restart команда, которая также будет ждать, пока старый рабочий процесс сначала остановится (сценарий generic-init.d использует это для своей команды перезапуска).

Вот код обработчика SIGHUP: https://github.com/celery/celery/blob/master/celery/apps/worker.py#L280-L295 Как видите, для этого требуется sys.executable и sys.argv должен быть установлен так, чтобы его можно было использовать для перезапуска рабочего (не уверен, почему это не задокументировано)

Я не знаю, кто начал эту тенденцию, но люди привыкли ожидать SIGHUP либо перечитывать файлы конфигурации, либо перезапускаться самостоятельно, но это не всегда легко сделать правильно, и я думаю, что было безответственно выбирать сигнал, который отправляется при закрытии окна терминала;) Мы несколько раз обсуждали удаление обработчика Celery HUP.

Вы уверены, что документация, с которой вы обращаетесь, относится к актуальной развернутой версии? Если HUP функциональность была добавлена ​​в более новую версию, чем та, которую вы используете, поведение по умолчанию, вероятно, будет заключаться в завершении процесса.

(Прошу прощения, если это бесполезно, у меня нет опыта работы с этим конкретным демоном, и это лучшее, что я могу предложить.)