Supervisord добавление нескольких процессов для PHP и Gearman - PullRequest
3 голосов
/ 26 ноября 2011

Я недавно установил 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).

Спасибо Миназу за указание.

1 Ответ

5 голосов
/ 26 ноября 2011

Я всегда включаю параметр конфигурации Стоп-сигнал для моих файлов конфигурации супервизора. Это позволяет убить процесс редуктора при запросе остановки. Попробуйте это:

[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
...