PHP-FPM (7.4.2) 没有正常停止?

标签 php linux

在更新过程中,我们希望停止 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),它会创建第一个文件,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

最佳答案

运行 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是否仍然存在,如果不存在,则中断循环。

关于PHP-FPM (7.4.2) 没有正常停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60673012/

相关文章:

php - 正确的方式? 2 个 mysql DB 之间的自动同步

php - Symfony 2.0 NodeDefinition 中的 defaultValue 到底是如何工作的?

php - 为此目的加密/解密通过 PHP 上传的文件的最佳方法?

linux - 环回堆栈位于何处?

python - 通过 Python 运行终端命令时出现问题

php - 索纳塔管理过滤器 : Invalid parameter number: number of bound variables does not match number of tokens

php - preg_match() : No ending delimiter '^' found

linux - 解释性语言中类似 ncurses 的绑定(bind)

linux - 从文件中删除字段保持定界符不变

linux - 将 std 错误重定向到文件时的顺序为 2>&1