为了账号安全,请及时绑定邮箱和手机立即绑定

PHP-FPM (7.4.2) 不会优雅地停止?

PHP-FPM (7.4.2) 不会优雅地停止?

PHP
慕森王 2022-10-28 16:19:11
在更新期间,我们希望停止 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 将被删除。因此,为了使其工作:

  1. $(kill -QUIT $(cat /run/php/php7.4-fpm.pid))

  2. 在一个循环中,检查是否/run/php/php7.4-fpm.pid仍然存在,如果不存在,则中断循环。


查看完整回答
反对 回复 2022-10-28
  • 1 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信