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