Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Supervisord为PHP和Gearman添加多个进程_Php_Gearman_Supervisord - Fatal编程技术网

Supervisord为PHP和Gearman添加多个进程

Supervisord为PHP和Gearman添加多个进程,php,gearman,supervisord,Php,Gearman,Supervisord,我最近用PHP5-FPM、Gearman和Supervisor建立了UbuntuNatty。我已经编辑了我的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_

我最近用PHP5-FPM、Gearman和Supervisor建立了UbuntuNatty。我已经编辑了我的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停止和/etc/init.d/gearman-job-server启动

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

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

提前谢谢

编辑

我找到了问题的原因。这与supervisord.conf和我的init脚本有一点冲突

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

pidfile=/tmp/supervisord.pid
但是我在
/etc/init.d/supervisord
上的init脚本具有以下设置:

NAME=supervisord
PIDFILE=/var/run/$NAME.pid
所以我只是更改了supervisord.conf中的设置,以匹配init脚本中的设置

此外,我还将
stopsignal=KILL
添加到我的supervisord配置文件(supervisord.conf)中的程序配置中


感谢Minaz的指导。

我总是为我的主管配置文件包含stopsignal配置选项。这允许在请求停止时终止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

我更新了supervisord.conf文件并添加了
stopsignal=KILL
,但当我停止supervisord时,它不会停止进程,不知道为什么只是好奇,你需要经常重新启动supervisord吗?不,我只是测试系统,以确保一切正常工作。它在停止和启动时做同样的事情,而不仅仅是重新启动。我发现了问题所在,我在编辑问题时发布了信息。当supervisord退出时,流程不会停止。这样,您就可以升级supervisord并保持长时间运行的进程运行