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的指导.
我总是为我的超级用户配置文件包含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)