Supervisord agregando múltiples procesos para PHP y Gearman
Recientemente configuré Ubuntu Natty con PHP5-FPM, Gearman y Supervisor. He editado mi configuración de Supervisor para ejecutar un trabajador de 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
Aquí está la información relevante (que muestra solo procesos gearmand y php) cuando Ilsof -i -P
antes de ejecutar la supervisión:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
gearmand 29314 gearman 6u IPv4 328139 0t0 TCP localhost:4730 (LISTEN)
Y esto es lo que obtengo cuando yolsof -i -P
después de que yo/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)
No veo ningún listado para el supervisor en sí, ¿debería ver al supervisor como uno de los comandos?!
e todos modos, cuando me detengo y empiezo (o reinicio) el supervisor de nuevo:
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)
Parece que cada vez que paro y comienzo a supervisar, crea otro proceso de php y luego otro. Es solo cuando reinicio el equipo y que vuelve a la normalidad, es decir,/etc/init.d/gearman-job-server stop && /etc/init.d/gearman-job-server start
.
Esto me parece anormal, ya que cuando dejo de supervisar, se supone que debe detener a
¿Es así como funciona el supervisor? ¿Hay alguna manera de evitar que esto suceda?!
Gracias por adelantado
EDITA
Descubrí lo que estaba causando el problema. Fue un pequeño conflicto con supervisord.conf y mi script de inicio.
Mi archivo supervisord.conf tenía la siguiente configuración:
pidfile=/tmp/supervisord.pid
Pero mi script de inicio en/etc/init.d/supervisord
tenía la siguiente configuración:
NAME=supervisord
PIDFILE=/var/run/$NAME.pid
Así que acabo de cambiar la configuración en supervisord.conf para que coincida con lo que estaba en mi script de inicio.
Además, agreguéstopsignal=KILL
a la configuración del programa en mi archivo de configuración de supervisor (supervisord.conf).
Gracias a Minaz por la dirección.