Estoy intentando ejecutar el siguiente comando en segundo plano usando supervisord
:
php /home/instacheeta/artisan queue:work --timeout=120
Después de instalar el servicio de supervisor en mi servidor, definir su configuración e iniciarlo, no hay ningún cambio en la base de datos que indique que el supervisor está ejecutando la aplicación PHP.
Mi configuración de supervisor:
[program:instacheeta]
process_name=%(program_name)s_%(process_num)s
command=php /home/instacheeta/artisan queue:work --timeout=120
autostart=true
autorestart=true
numprocs=1
redirect_stderr=true
stdout_logfile=/home/instacheeta/worker.log
queue:work
Se dispara después de ejecutar cronjob
cada minuto y funciona hasta el final.
cronjob
funciona bien; Lo verifiqué en mi base de datos para verificar que se almacenen nuevos datos cada minuto. Lamentablemente, el supervisor no parece ejecutar el comando definido.
No me sale ningún error worker.log
. Otra información para solucionar problemas:
[root@host instacheeta]# ps aux|grep supervisor
root 3267 0.0 0.2 219784 12992 ? Ss 11:47 0:02 /usr/bin/python /usr/bin/supervisord
root 18279 0.0 0.0 112680 948 pts/0 S+ 14:38 0:00 grep --color=auto supervisor
No se puede agregar el programa a supervisorctl
:
[root@host instacheeta]# supervisorctl add instacheeta
ERROR: no such process/group: instacheeta
estado de supervisor:
[root@host instacheeta]# supervisorctl status
[root@host instacheeta]#
Respuesta1
Es necesario recargar la configuración del supervisor.
Hay dos métodos para esto:
Reinicie el
supervisor
servicio utilizando laservice
herramienta (service supervisor restart
). Esto llamaría a todos los procesos supervisados, pero como actualmente no tiene dichos procesos en ejecución, esto no es un problema.Pídale al
supervisor
demonio que recargue dinámicamente su configuración desde los archivos de configuración. Ejecutesupervisorctl reread
seguido desupervisorctl update
para actualizar la configuración. Ahora puede utilizarstart
para iniciar el programa ostatus
ver su estado.
supervisor
no es cron
!
En tu pregunta afirmas:
cronjob
funciona bien; Lo verifiqué en mi base de datos para verificar que se almacenen nuevos datos cada minuto. Lamentablemente, el supervisor no parece ejecutar el comando definido.
Tenga en cuenta que si anteriormente tenía un cronjob que invocaba el comando en un ciclo regular, supervisor
no lo hará sin intervención externa o a menos que el programa muera después de terminar de funcionar. El supervisor generalmente está destinado a invocar binarios, proporcionar un servicio y permanecer en ejecución una vez iniciado.
Recomendaría cambiar la aplicación para que se inicie una vez y tenga un cronograma interno en el que realice las acciones necesarias en la base de datos.