Во время обновления мы хотим остановить php -fpm и дождаться завершения всех запущенных скриптов, прежде чем вносить какие-либо изменения в файл.
Мы выяснили, что нам нужно установить process_control_timeout, поэтому поместили «process_control_timeout = 36000s» в «/etc/php/7.4/fpm/pool.d/zz-00-overrides.ini» (и мы перезапущен php -fpm).
Затем мы создали тестовый скрипт для его тестирования. Наш тестовый скрипт создает файл, затем через 30 секунд он создает другой файл. Сценарий:
$id = random_int(10000, 99999);
file_put_contents(__DIR__ . '/' . $id . '-start', '');
sleep(30);
file_put_contents(__DIR__ . '/' . $id . '-end', '');
Когда мы запускаем сценарий в обычном режиме (браузер -> nginx -> php -fpm), он создает 1-й файл, а через 30 секунд создает 2-й файл.
Когда мы запустим скрипт, подождите несколько секунд, а затем попробуйте остановить его (запустить так же, как и раньше: browser -> nginx -> php -fpm) (остановлено: " service php7 .4-fpm stop "), он создаст 1-й файл, затем запускается команда service stop, которая занимает всего 2-3 секунды, затем браузер говорит" 502 Bad Gateway ", а затем 2-й файл никогда не создавался.
Это не изящно останавливается. Для нас желаемым результатом является то, что «service php7 .4-fpm stop» ждет завершения всех сценариев, а затем останавливается, вместо того, чтобы убить все запущенные сценарии, как это происходит сейчас, чтобы принудительно остановить ,
Мы что-то упускаем, мы что-то делаем не так? Это где-то ошибка? Любая помощь могла бы быть полезна.
- Debian 10 (Linux 4.19.0-6-cloud-amd64 # 1 SMP Debian 4.19.67-2 + deb10u2 (2019-11-11) x86_64 GNU / Linux)
- PHP 7.4.2
- Nginx 1.14.2