gpt4 book ai didi

php - Supervisord 为 PHP 和 Gearman 添加多个进程

转载 作者:可可西里 更新时间:2023-11-01 00:50:36 24 4
gpt4 key购买 nike

我最近使用 PHP5-FPM、Gearman 和 Supervisor 安装了 Ubuntu Natty。我编辑了我的 Supervisord 配置以运行 Gearman worker。

[program:gearman] 
command=/usr/bin/php php_gearman_worker.php
numprocs=1
directory=/root/sandbox
stdout_logfile=/root/sandbox/supervisord.log
environment=GEARMAN_USER=gearman
autostart=true
autorestart=true
user=gearman

这是我在运行 supervisord 之前 lsof -i -P 时的相关信息(仅显示 gearmand 和 php 进程):

COMMAND     PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
gearmand 29314 gearman 6u IPv4 328139 0t0 TCP localhost:4730 (LISTEN)

这是我在 /etc/init.d/supervisor stop &&/etc/init.d/supervisor start 之后 lsof -i -P 得到的结果.

COMMAND     PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
gearmand 29314 gearman 6u IPv4 328139 0t0 TCP localhost:4730 (LISTEN)
gearmand 29314 gearman 11u IPv4 328206 0t0 TCP localhost:4730->localhost:39072 (ESTABLISHED)
php 29571 gearman 4u IPv4 329744 0t0 TCP localhost:39072->localhost:4730 (ESTABLISHED)

我没有看到 supervisord 本身的任何列表,我应该将 supervisord 视为命令之一吗?!

无论如何,当我再次停止并启动(或重新启动)supervisord 时:

COMMAND     PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
gearmand 29314 gearman 6u IPv4 328139 0t0 TCP localhost:4730 (LISTEN)
gearmand 29314 gearman 11u IPv4 328206 0t0 TCP localhost:4730->localhost:39072 (ESTABLISHED)
gearmand 29314 gearman 12u IPv4 329754 0t0 TCP localhost:4730->localhost:51570 (ESTABLISHED)
php 29571 gearman 4u IPv4 329744 0t0 TCP localhost:39072->localhost:4730 (ESTABLISHED)
php 29619 gearman 4u IPv4 327233 0t0 TCP localhost:51570->localhost:4730 (ESTABLISHED)

看起来每次我停止并启动 supervisord 时,它都会创建另一个 php 进程,然后再创建一个。只有当我重新启动 gearmand 时,它才会恢复正常,即 /etc/init.d/gearman-job-server stop &&/etc/init.d/gearman-job-server start

这对我来说似乎不正常,因为当我停止 supervisord 时,它应该停止

这就是 supervisord 的工作方式吗?!有什么办法可以防止这种情况发生吗?!

提前致谢。

编辑

我找出了导致问题的原因。这是与 supervisord.conf 和我的初始化脚本的小冲突。

我的 supervisord.conf 文件具有以下设置:

pidfile=/tmp/supervisord.pid

但是我在 /etc/init.d/supervisord 的初始化脚本有以下设置:

NAME=supervisord
PIDFILE=/var/run/$NAME.pid

所以我只是更改了 supervisord.conf 中的设置以匹配我的初始化脚本中的设置。

另外,我在我的 supervisord 配置文件 (supervisord.conf) 的程序配置中添加了 stopsignal=KILL

感谢 Minaz 的指导。

最佳答案

我总是在我的主管配置文件中包含停止信号配置选项。这允许在请求停止时终止 gearman 进程。试试这个:

[program:gearman] 
command=/usr/bin/php php_gearman_worker.php
numprocs=1
directory=/root/sandbox
stdout_logfile=/root/sandbox/supervisord.log
environment=GEARMAN_USER=gearman
autostart=true
autorestart=true
user=gearman
stopsignal=KILL

关于php - Supervisord 为 PHP 和 Gearman 添加多个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8279848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com