PHP -FPM (7.4.2) не останавливается изящно? - PullRequest
1 голос
/ 13 марта 2020

Во время обновления мы хотим остановить 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

1 Ответ

1 голос
/ 14 марта 2020

Запуск kill -QUIT $(cat /run/php/php7.4-fpm.pid) учитывает конфигурацию process_control_timeout. Это приведет к остановке процесса PHP -FPM, как только все сценарии завершат свое выполнение. В этот момент PID будет удален. Итак, чтобы заставить его работать:

  1. run $(kill -QUIT $(cat /run/php/php7.4-fpm.pid))
  2. в al oop, проверьте, существует ли /run/php/php7.4-fpm.pid, если нет, сломайте l oop.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...