Недавно я создал Ubuntu Natty с PHP5-FPM, Gearman и Supervisor. Я редактировал конфигурацию Supervisard для запуска рабочего 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
прежде чем запускать lsof -i -P
:
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)
Я не вижу никаких записей для супервизора, должен ли я видеть супервизор как один из команд ?!
Во всяком случае, когда я останавливаюсь и снова запускаю (или перезапускаю) супервизор:
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
.
Мне кажется ненормальным, что, когда я останавливаю супервизор, он должен остановиться
Так работает суперсайдер ?! Есть ли способ предотвратить это?
Заранее спасибо.
РЕДАКТИРОВАТЬ
Я узнал, что вызвало проблему. Это был небольшой конфликт с supervisord.conf и моим скриптом init.
У моего файла supervisord.conf были следующие настройки:
pidfile=/tmp/supervisord.pid
Но мой сценарий инициализации в /etc/init.d/supervisord
имел следующий параметр:
NAME=supervisord PIDFILE=/var/run/$NAME.pid
Поэтому я просто изменил настройку в файле supervisord.conf, чтобы соответствовать тому, что было в моем скрипте инициализации.
Кроме того, я добавил stopsignal=KILL
в конфигурацию программы в моем конфигурационном файле supervisord (supervisord.conf).
Благодаря Миназу за направление.
Я всегда включаю опцию stopignal config для моих конфигурационных файлов диспетчера. Это позволяет убить процесс редуктора при запросе остановки. Попробуй это:
[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