php laravel supervisord

php - Laravel Queue con Supervisor, ejecutando pero no procesando trabajos



supervisord (2)

¡Sé que es viejo pero tuve exactamente el mismo problema hace aproximadamente 2 semanas y lo solucioné! (supervisor 3.0 aquí) El problema con mi cola era solo un trabajador. Cuando agrego 2 trabajadores más y vuelvo a leer / actualizar los archivos de cofig, todo funciona a la perfección. Así que trata de cambiar el número de trabajadores, esto puede ayudarte.

He configurado Laravel Queue usando la base de datos y he configurado Supervisor para que siga funcionando, sin embargo, deja de procesar la cola después de un tiempo.

Estoy usando Mail::queue para enviar correos electrónicos. Si hago SSH en el servidor y ejecuto php /home/my/path/to/artisan --env=production --timeout=240 queue:listen --tries=5 entonces funciona bien y los correos electrónicos se envían. Pero, obviamente, no quiero tener que SSH para procesar los correos electrónicos, quiero que la cola se ejecute las 24 horas del día, los 7 días de la semana, así que instalé un supervisor para gestionar esto. He editado mi archivo supervisord.conf para incluir el siguiente programa:

[program:laravel_queue] command=php /home/my/path/to/artisan --env=production --timeout=240 queue:listen --tries=5 autostart=true autorestart=true logfile=/var/log/laraqueue.log

Y cuando comienzo el programa funciona, mis correos electrónicos se envían. Sin embargo, después de algún tiempo (normalmente al día siguiente) los correos electrónicos no se envían. Reviso la base de datos y la tabla de trabajos se está llenando. Cuando SSH en el servidor y ejecuto el supervisorctl status obtengo:

laravel_queue RUNNING pid 21081, uptime 2 days, 23:18:51

Dice 2 días, ya que ha estado funcionando durante el fin de semana y no ha funcionado hoy (lunes). Claramente no se está ejecutando, entonces, ¿cómo puedo hacer que Supervord reconozca que no está ejecutándose y reiniciarlo?

Si lo reinicio manualmente con supervisorctl restart laravel_queue , porque no está ejecutando supervisor, no puedo detenerlo y parece que se cuelga hasta que presiono CTRL + C. En ese momento recibo un rastreo que no entiendo:

Traceback (most recent call last): File "/usr/bin/supervisorctl", line 6, in <module> main() File "/usr/lib/python2.6/site-packages/supervisor/supervisorctl.py", line 598, in main c.onecmd(" ".join(options.args)) File "/usr/lib/python2.6/site-packages/supervisor/supervisorctl.py", line 86, in onecmd return func(arg) File "/usr/lib/python2.6/site-packages/supervisor/supervisorctl.py", line 467, in do_restart self.do_stop(arg) File "/usr/lib/python2.6/site-packages/supervisor/supervisorctl.py", line 433, in do_stop result = supervisor.stopProcess(processname) File "/usr/lib64/python2.6/xmlrpclib.py", line 1199, in __call__ return self.__send(self.__name, args) File "/usr/lib64/python2.6/xmlrpclib.py", line 1489, in __request verbose=self.__verbose File "/usr/lib/python2.6/site-packages/supervisor/options.py", line 1309, in request errcode, errmsg, headers = h.getreply() File "/usr/lib64/python2.6/httplib.py", line 1064, in getreply response = self._conn.getresponse() File "/usr/lib64/python2.6/httplib.py", line 990, in getresponse response.begin() File "/usr/lib64/python2.6/httplib.py", line 391, in begin version, status, reason = self._read_status() File "/usr/lib64/python2.6/httplib.py", line 349, in _read_status line = self.fp.readline() File "/usr/lib64/python2.6/socket.py", line 433, in readline data = recv(1) KeyboardInterrupt

Al revisar el estado nuevamente, la cola está detenida, así que ejecuto supervisorctl start laravel_queue y obtengo el mismo bloqueo que cuando se ejecuta el reinicio, pero se inició a medida que los trabajos se procesan y se envían correos electrónicos. Si presiono CTRL + C nuevamente, obtengo el mismo rastreo que el anterior.

Iniciar sesión

He revisado el registro de laraqueue después de dejarlo durante la noche. Intenté enviar un correo electrónico esta mañana y la mesa de trabajo está sentada allí esperando el proceso. El registro está lleno de esto:

X-Powered-By: PHP/5.6.10^M Content-type: text/html; charset=UTF-8^M ^M

Eso es. Sólo un montón de eso se repite.

He comprobado el registro del supervisor y solo informa el inicio exitoso de laravel_queue. Para completar el registro es:

2015-10-21 14:25:24,997 INFO /var/tmp/supervisor.sock:Medusa (V1.1.1.1) started at Wed Oct 21 14:25:24 2015 Hostname: <unix domain socket> Port:/var/tmp/supervisor.sock 2015-10-21 14:25:25,099 CRIT Running without any HTTP authentication checking 2015-10-21 14:25:25,107 INFO daemonizing the process 2015-10-21 14:25:25,108 INFO supervisord started with pid 3407 2015-10-21 14:25:25,115 INFO spawned: ''laravel_queue'' with pid 3409 2015-10-21 14:25:26,729 INFO success: laravel_queue entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)



ACTUALIZAR

Después de actualizar el supervisor a la última versión, todavía tengo el mismo problema. Laraqueue.log tiene el mismo contenido que antes, nada útil. Sin embargo, el registro del supervisor tiene un poco más en él esta vez:

2015-10-22 10:19:59,454 CRIT received SIGTERM indicating exit request 2015-10-22 10:19:59,454 INFO waiting for laravel_queue to die 2015-10-22 10:19:59,460 INFO stopped: laravel_queue (terminated by SIGTERM) 2015-10-22 10:19:59,460 INFO received SIGCLD indicating a child quit 2015-10-22 10:26:02,019 CRIT Supervisor running as root (no user in config file) 2015-10-22 10:26:02,085 CRIT Server ''inet_http_server'' running without any HTTP authentication checking 2015-10-22 10:26:02,092 INFO daemonizing the supervisord process 2015-10-22 10:26:02,093 INFO supervisord started with pid 17268 2015-10-22 10:26:03,105 INFO spawned: ''laravel_queue'' with pid 17269 2015-10-22 10:26:04,107 INFO success: laravel_queue entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2015-10-22 10:37:22,157 WARN received SIGTERM indicating exit request 2015-10-22 10:37:22,157 INFO waiting for laravel_queue to die 2015-10-22 10:37:22,163 INFO stopped: laravel_queue (terminated by SIGTERM)

Hubo un par de instancias en las que el supervisor recibió la solicitud de salida y la inició de nuevo, y luego el final del registro está arriba de donde detiene la cola, pero no lo vuelve a iniciar por algún motivo. He revisado el registro de laravel (en almacenamiento / logs) pero no hay nada allí durante ese tiempo.


Comprueba qué versión de Supervisor tienes. Se sabe que algunos administradores de paquetes se olvidan de actualizar Supervisor. Creo que su problema se solucionará actualizando Supervisor. Por ejemplo, v2.1 de Supervisor es de 2007 y todavía está en algunos paquetes.

La versión actual de Supervisor es v3.13 aunque algunos dicen (ver la referencia en la parte inferior) v3 es la última versión estable.

Compruebe qué versión de Supervisor está utilizando

[root@test supervisor]# yum list | grep supervisor

Compare la versión mostrada para: https://pypi.python.org/pypi/supervisor

Quitar e instalar (fácil de instalar es bueno)

[root@test ~]$ yum remove supervisor [root@test ~]$ wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -O - | sudo python [root@test ~]$ sudo easy_install supervisor Searching for supervisor Reading https://pypi.python.org/simple/supervisor/ Best match: supervisor 3.0

Actualizar:

Tómese un momento para mirar aquí, vale la pena ( http://ahmed.amayem.com/running-a-node-js-app-ghost-in-the-background-continuously-with-supervisor-supervisord/ ) . Aunque él está ejecutando node.js / ghost con Supervisor, ¡no creo que eso importe ya que todo se trata de Supervisor!

Refs: https://github.com/Supervisor/supervisor/issues/165

http://ahmed.amayem.com/running-a-node-js-app-ghost-in-the-background-continuously-with-supervisor-supervisord/

http://ahmed.amayem.com/woes-of-using-an-outdated-supervisord-to-run-a-node-js-app-ghost/