我最近使用 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
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)
这就是我在我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)
我没有看到任何关于 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 stop && /etc/init.d/gearman-job-server start
。
这对我来说似乎不正常,因为当我停止 supervisord 时,它应该停止
这是supervisord的工作方式吗?!有什么办法可以防止这种情况发生吗?!
提前致谢。
编辑
我发现了导致问题的原因。这是与 supervisord.conf 和我的初始化脚本的小冲突。
我的 supervisord.conf 文件具有以下设置:
pidfile=/tmp/supervisord.pid
但是我的初始化脚本/etc/init.d/supervisord
具有以下设置:
NAME=supervisord
PIDFILE=/var/run/$NAME.pid
所以我只是更改了 supervisord.conf 中的设置以匹配我的 init 脚本中的设置。
另外,我stopsignal=KILL
在我的supervisord配置文件(supervisord.conf)中添加了程序配置。
感谢 Minaz 的指导。