Supervisord为PHP和Gearman添加了多个进程

Obi*_*ill 3 php gearman supervisord

我最近用PHP5-FPM,Gearman和Supervisor建立了Ubuntu Natty.我编辑了我的Supervisord配置来运行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
Run Code Online (Sandbox Code Playgroud)

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

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

而这就是我lsof -i -P追求的时候所得到的/etc/init.d/supervisor stop && /etc/init.d/supervisor start.

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)
Run Code Online (Sandbox Code Playgroud)

我没有看到任何关于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)
Run Code Online (Sandbox Code Playgroud)

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

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

这是supervisord的工作方式吗?!有没有办法阻止这种情况发生?!

提前致谢.

编辑

我发现了造成这个问题的原因.这是与supervisord.conf和我的init脚本的一个小冲突.

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

pidfile=/tmp/supervisord.pid
Run Code Online (Sandbox Code Playgroud)

但我的init脚本/etc/init.d/supervisord有以下设置:

NAME=supervisord
PIDFILE=/var/run/$NAME.pid
Run Code Online (Sandbox Code Playgroud)

所以我只是更改了supervisord.conf中的设置以匹配我的init脚本中的设置.

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

感谢Minaz的指导.

min*_*naz 5

我总是为我的超级用户配置文件包含stopsignal配置选项.这允许在请求停止时杀死齿轮器过程.试试这个:

[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
Run Code Online (Sandbox Code Playgroud)

  • 当supervisord退出时,进程不会停止.这样您就可以升级supervisord并保持长时间运行的进程 (2认同)