En este tutorial vamos a ver cómo puedes mantener en ejecución un script que monitorice el sistema de colas de Laravel con PM2, de modo que esté siempre en ejecución. Esta guía funcionará con independencia de sistema de colas que uses, ya sea redis o tu base de datos.
Ejecuta el worker queue:work
Para que el sistema de colas funcione en Laravel, tendremos que ejecutar el worker mediante el siguiente comando:
artisan queue:work
Esto iniciará el proceso que monitorizará la cola de procesos, ejecutándolos bajo demanda. Sin embargo, este proceso podría dejar de funcionar en muchas ocasiones, por lo que necesitamos otro proceso que monitorize que el comando anterior esté en funcionamiento.
Según la documentación de Laravel, es recomendable usar supervisor para supervisar que el comando queue:work
se esté ejecutando. Supervisor es un sistema de gestión de procesos. Sin embargo, en este tutorial vamos a ver cómo lograrlo usando PM2, que es otro sistema de gestión de procesos que muchos encontramos más amigable.
Monitoriza el worker mediante PM2
Si no tienes instalado PM2 en tu sistema, tendrás que instalarlo usando npm. Si no tienes npm instalado en tu sistema, consulta el tutorial de instalación de Node. Una vez te hayas asegurado de que npm y Node.js están instalados en tu sistema, puedes continuar.
Para instalar PM2 globalmente en tu sistema, debes usar este comando:
npm install pm2 -g
Con esto ya estará pm2 instalado. Para asegurarte de ello, prueba a ejecutar el comando pm2 status
.
Vamos a crear una archivo de configuración para PM2 que nos permita mantener el proceso queue:work
en ejecución. Para ello crear un archivo de configuración YAML el el directorio raíz de Laravel con el nombre queue-listen.yml
usando tu editor preferido.
Este será el contenido del archivo:
apps:
- name: queue-listen
script: artisan
exec_mode: fork
interpreter: php
instances: 1
args:
- queue:listen
- --tries=5
- --sleep=1
Lo que hace este script es sencillamente iniciar el comando artisan queue:listen
usando el intérprete de php.
Ahora ya podrás ejecutar el siguiente comando para iniciar el proceso queue:work
a través del archivo que hemos creado, manteniéndose así en ejecución aunque el proceso finalice:
pm2 start queue-listen.yml
Si quieres conocer el estado del proceso en cualquier momento, ejecuta el comando pm2 status
:
pm2 status
Esto debería mostrar en la terminal la lista de procesos en ejecución que has iniciado mediante el comando pm2
:
Esto ha sido todo. Espero que te haya servido de ayuda.