在更新期间,我们希望停止 php-fpm 并等待所有正在运行的脚本完成,然后再进行任何文件更改。
我们发现我们需要设置process_control_timeout,所以我们在“/etc/php/7.4/fpm/pool.d/zz-00-overrides.ini”中放置了“process_control_timeout = 36000s”(我们重新启动了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),它会创建第一个文件,30 秒后它会创建第二个文件。
当我们运行脚本时,等待几秒钟,然后尝试停止它(运行方式和之前一样:浏览器 -> nginx -> php-fpm)(停止方式:“service php7.4-fpm stop”),它将创建第一个文件,然后运行服务停止命令,只需要 2-3 秒,然后浏览器显示“502 Bad Gateway”,然后永远不会创建第二个文件。
它不会优雅地停止。我们想要的结果是“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
心有法竹