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

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

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

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

Есть идеи?

2 ответа

Решение

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

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

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

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

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

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

Другие вопросы по тегам