Cómo monitorizar las colas de Laravel con PM2

Laravel

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.


Avatar de Edu Lazaro

Edu Lázaro: Ingeniero técnico en informática, actualmente trabajo como desarrollador web y programador de videojuegos.

👋 Hola! Soy Edu, me encanta crear cosas y he redactado esta guía. Si te ha resultado útil, el mayor favor que me podrías hacer es el de compatirla en Twitter 😊

Si quieres conocer mis proyectos, sígueme en Twitter.

Deja una respuesta

“- Hey, Doc. No tenemos suficiente carretera para ir a 140/h km. - ¿Carretera? A donde vamos, no necesitaremos carreteras.”