监督为PHP和Gearman添加多个进程



我最近用PHP5-FPM、Gearman和Supervisor安装了Ubuntu Natty。我已经编辑了我的superord配置来运行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

这是相关的信息(只显示军备和php进程),当我运行前lsof -i -P:

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)

我没有看到任何关于superord本身的列表,我应该把superord看作一个命令吗?!

无论如何,当我停止和启动(或重新启动)再次监督:

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)

看起来每次我停止和启动监理,它创建了另一个php进程,然后另一个。只有当我重新启动设备,它才会恢复正常,即/etc/init.d/gearman-job-server stop && /etc/init.d/gearman-job-server start

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

这就是监督的工作方式吗?!有什么办法能阻止这一切发生吗!

提前感谢。

编辑

我发现了引起问题的原因。这与supervisor .conf和我的初始化脚本有一个小冲突。

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

pidfile=/tmp/supervisord.pid

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

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

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

同时,我将stopsignal=KILL添加到我的监管配置文件(监管.conf)中的程序配置中。

感谢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

相关内容

  • 没有找到相关文章

最新更新