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