¿Cómo mantener Laravel Queue ejecutándose en segundo plano?

Publicado 17 de octubre de 2024

Problema: Mantener activas las colas de Laravel

Las colas de Laravel ayudan a gestionar tareas en segundo plano, pero pueden dejar de funcionar inesperadamente. Esto puede retrasar el procesamiento de trabajos y afectar el rendimiento de tu aplicación Laravel. Mantener los workers de las colas en funcionamiento es un problema común para los desarrolladores de Laravel.

Soluciones para un procesamiento persistente de colas

Uso del comando nohup

El comando nohup mantiene los procesos de cola de Laravel ejecutándose en segundo plano, incluso después de cerrar una conexión SSH. Significa "no colgar" y permite que un proceso continúe ejecutándose después de cerrar sesión.

Para usar nohup con la cola de Laravel, ejecuta este comando:

nohup php artisan queue:work --daemon &

El "&" al final inicia el proceso en segundo plano, permitiéndote usar la terminal.

Nohup escribe la salida en un archivo llamado nohup.out en el directorio actual. Puedes redirigir la salida a un archivo diferente o descartarla:

nohup php artisan queue:work --daemon > /dev/null 2>&1 &

Este comando descarta tanto la salida estándar como los mensajes de error.

Consejo: Monitorear procesos nohup

Para monitorear procesos nohup, usa el comando 'ps':

ps aux | grep artisan

Esto lista todos los procesos artisan en ejecución, incluyendo los iniciados con nohup.

Implementación de Supervisor

Supervisor es un sistema de control de procesos para sistemas operativos tipo Unix. Ofrece una solución para gestionar los workers de colas de Laravel.

Supervisor proporciona estos beneficios para la gestión de colas de Laravel:

  • Reinicia los workers de cola si se bloquean
  • Gestiona múltiples workers de cola
  • Registra y monitorea procesos

Para configurar Supervisor para las colas de Laravel:

  1. Instala Supervisor en tu servidor
  2. Crea un archivo de configuración para tu worker de cola de Laravel
  3. Actualiza la configuración de Supervisor
  4. Inicia el proceso de Supervisor

Una configuración básica de Supervisor para un worker de cola de Laravel podría verse así:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /ruta/a/tu/proyecto/artisan queue:work
autostart=true
autorestart=true
user=www-data
numprocs=8
redirect_stderr=true
stdout_logfile=/ruta/a/tu/proyecto/worker.log

Esta configuración inicia 8 procesos de worker de cola y los reinicia si se detienen.

Ejemplo: Comandos de Supervisor

Comandos comunes de Supervisor:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
sudo supervisorctl stop laravel-worker:*
sudo supervisorctl restart laravel-worker:*

Estos comandos recargan la configuración, inician, detienen y reinician los workers de cola de Laravel.