Como manter a fila do Laravel rodando em segundo plano?

Publicado 17 de outubro de 2024

Problema: Mantendo as Filas do Laravel Ativas

As filas do Laravel ajudam a gerenciar tarefas em segundo plano, mas podem parar de funcionar inesperadamente. Isso pode atrasar o processamento de jobs e afetar o desempenho da sua aplicação Laravel. Manter os workers das filas em execução é um problema comum para desenvolvedores Laravel.

Soluções para Processamento Persistente de Filas

Usando o Comando nohup

O comando nohup mantém os processos da fila do Laravel rodando em segundo plano, mesmo após fechar uma conexão SSH. Significa "no hang up" (sem desconexão) e permite que um processo continue rodando após você sair do sistema.

Para usar o nohup com a fila do Laravel, execute este comando:

nohup php artisan queue:work --daemon &

O "&" no final inicia o processo em segundo plano, permitindo que você use o terminal.

O nohup escreve a saída em um arquivo chamado nohup.out no diretório atual. Você pode redirecionar a saída para um arquivo diferente ou descartá-la:

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

Este comando descarta tanto a saída padrão quanto as mensagens de erro.

Dica: Monitorar processos nohup

Para monitorar processos nohup, use o comando 'ps':

ps aux | grep artisan

Isso lista todos os processos artisan em execução, incluindo aqueles iniciados com nohup.

Implementando o Supervisor

O Supervisor é um sistema de controle de processos para sistemas operacionais tipo Unix. Ele oferece uma solução para gerenciar workers da fila do Laravel.

O Supervisor oferece estes benefícios para o gerenciamento de filas do Laravel:

  • Reinicia os workers das filas se eles travarem
  • Gerencia múltiplos workers de filas
  • Registra logs e monitora processos

Para configurar o Supervisor para filas do Laravel:

  1. Instale o Supervisor no seu servidor
  2. Crie um arquivo de configuração para o seu worker da fila do Laravel
  3. Atualize a configuração do Supervisor
  4. Inicie o processo do Supervisor

Uma configuração básica do Supervisor para um worker de fila do Laravel pode ser assim:

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

Esta configuração inicia 8 processos de workers de fila e os reinicia se pararem.

Exemplo: Comandos do Supervisor

Comandos comuns do Supervisor:

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

Esses comandos recarregam a configuração, iniciam, param e reiniciam os workers da fila do Laravel.