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:
- Instale o Supervisor no seu servidor
- Crie um arquivo de configuração para o seu worker da fila do Laravel
- Atualize a configuração do Supervisor
- 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.