我最近用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