Я недавно установил Ubuntu Natty с PHP5-FPM, Gearman и Supervisor. Я отредактировал свою конфигурацию 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
Вот соответствующая информация (показывающая только процессы gearmand и php), когда я lsof -i -P
перед выполнением supervisord:
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 как одну из команд?!
В любом случае, когда я останавливаюсь и снова запускаю (или перезапускаю) супервизор:
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, а затем другой. Только когда я перезагружаю механизм, он возвращается в нормальное состояние, то есть /etc/init.d/gearman-job-server stop && /etc/init.d/gearman-job-server start
.
Мне кажется, что это ненормально, когда я прекращаю наблюдение, это должно прекратиться
Так работает супервизор ?! Есть ли способ, которым я могу предотвратить это?!
Заранее спасибо.
EDIT
Я выяснил, в чем причина проблемы. Это был небольшой конфликт с supervisord.conf и моим скриптом инициализации.
Мой файл supervisord.conf имел следующие настройки:
pidfile=/tmp/supervisord.pid
Но мой скрипт инициализации на /etc/init.d/supervisord
имел следующую настройку:
NAME=supervisord
PIDFILE=/var/run/$NAME.pid
Так что я просто изменил настройку в supervisord.conf, чтобы она соответствовала тому, что было в моем скрипте инициализации.
Кроме того, я добавил stopsignal=KILL
в конфигурацию программы в моем конфигурационном файле supervisord (supervisord.conf).
Спасибо Миназу за указание.