在更新期间,我们希望停止 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.2Nginx 1.14.2
1 回答
心有法竹
TA贡献1866条经验 获得超5个赞
运行kill -QUIT $(cat /run/php/php7.4-fpm.pid)
确实考虑了process_control_timeout
配置。一旦所有脚本完成执行,它将导致 PHP-FPM 进程停止。此时,PID 将被删除。因此,为了使其工作:
跑
$(kill -QUIT $(cat /run/php/php7.4-fpm.pid))
在一个循环中,检查是否
/run/php/php7.4-fpm.pid
仍然存在,如果不存在,则中断循环。
- 1 回答
- 0 关注
- 141 浏览
添加回答
举报
0/150
提交
取消