Ответ 1
php-fpm
допускает изящный перезапуск дочерних элементов, обычно с ключевым словом reload
вместо restart
в init script, отправляя сигнал USR2.
Итак, выполнив изящный перезапуск, вы не должны потерять любую транзакцию. Дети убиваются после окончания текущего управления запросами для каждого из них. Это должно быть достаточно, если вам не нужен реальный перезапуск. Я сделал несколько тестов, и, например, перезагрузки достаточно, чтобы:
- очистить кеш APC
- изменить путь к файлу журнала
- изменить минимальные/максимальные/начальные настройки для детей
Итак, я не нашел случая, когда еще нужен реальный перезапуск. За исключением того, что перезагрузка не может запустить остановленную службу.
Если вы хотите, чтобы другие пулы никогда не перезагружались, когда вы хотите перезагрузить один из них, вам нужно будет управлять несколькими демонами php-fpm и одним пулом на каждого демона. Это подразумевает запись нескольких сценариев инициализации и основных файлов конфигурации.
Использование ключевого слова restart является более опасным, особенно потому, что init script, возможно, убивает длительных пользователей на этапе остановки. И с несколькими демонами, управляемыми несколькими PID и конфигурационными файлами, вы даже можете получить команду start-stop-daemon
с опцией --exec
(что в случае с debian), и это убьет всех демонов, работающих с тем же исполняемым файлом php-fpm (эффективно отправив kill -9 для всех остальных параллельных демонов php-fpm после остановки правой с правильным PID, если вы запускаете несколько процессов php-fpm, что очень плохо).
Таким образом, использование ключевого слова reload (USR2 signal) является обязательным.