Как заставить supervisord подождать корректного завершения процесса?

Использую для демонизации PHP-процессов supervisord. Демон может долго запрашивать что-нибудь по какому-нибудь API и в этот момент кому-нибудь может понадобиться увеличить количество каких-нибудь процессов и он всё перезапустит. Или просто кто-то может жмакнуть перезапуск демона, а в это время демон выполняет важную работу.
Я назначаю обработчика pcntl_signal(SIGTERM, "handler"); в обработчике указываю для 15-го сигнала не вызывать exit, но процесс всё равно перезапускается, его pid меняется.
Если запускаю из консоли и перехватываю сигнал 2, ctrl+c, то это работает нормально, процесс не останавливается.
Вот вопрос - как я могу из PHP-кода заставить супервизор подождать?
  • Вопрос задан
  • 238 просмотров
Пригласить эксперта
Ответы на вопрос 1
@developinwed
На сколько я понял вам нужен "мягкий перезапуск"(reload). Супервизор рестартует процесс, он не сделает вам релоад, как вы хотите. Вот отличная статья о мягком перезапуске от Badoo habrahabr.ru/company/badoo/blog/252809, с исходниками на гитхабе https://github.com/badoo/habr/tree/master/phprocksyd . Но там нужно патчить PHP, что не всегда возможно.
Опишите подробней, что делает ваш демон, можно ли форкнуть ваш процесс и обрабатывать задачи в форках?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы