Ir para o conteúdo
PHP e frameworks

Filas e tarefas agendadas de um framework PHP em plano compartilhado

O agendador do framework precisa de uma única linha no cron chamando o comando de agendamento a cada minuto; todo o resto fica definido dentro do código. Já as filas, que em servidor dedicado rodam como processo permanente, em hospedagem compartilhada costumam ser tocadas por um comando que processa o que houver e encerra, também chamado pelo cron.

O agendador: uma linha, não várias

A confusão mais comum é cadastrar uma tarefa no cron para cada rotina do sistema. Não é assim que funciona. O cron chama um único comando do framework, e é ele quem consulta a lista de rotinas declaradas no código e decide o que executar naquele minuto. Adicionar uma rotina nova passa a ser mudança de código, sem tocar no painel.

Isso traz uma vantagem prática: as rotinas ficam versionadas junto com o projeto, e não escondidas em uma tela de configuração que ninguém lembra de consultar.

Por que a cada minuto

Como a decisão de executar está no código, o agendador precisa ser consultado no menor intervalo possível. Chamá-lo de hora em hora faria as rotinas de intervalo curto simplesmente nunca rodarem. A chamada é barata quando não há nada a fazer: o comando verifica a lista e encerra.

Filas sem processo permanente

Um processo de fila em modo permanente fica de pé indefinidamente esperando trabalho — e é exatamente o tipo de processo que estoura o limite de processos de uma conta compartilhada. A alternativa é usar o modo que processa a fila até esvaziá-la e então encerra, chamado periodicamente pelo cron. Você troca um pouco de latência por um consumo compatível com o plano.

Duas precauções ajudam: limitar o tempo de vida do comando, para que ele nunca fique preso, e evitar que duas execuções se sobreponham quando uma demorar mais que o intervalo.

Escolher onde a fila mora

Em plano compartilhado, guardar a fila no próprio banco de dados é o arranjo mais simples e não exige serviço adicional. Bancos em memória entregam mais desempenho, mas só fazem sentido onde esse serviço está disponível. O que você deve evitar é o modo de execução imediata em produção: ele faz o trabalho acontecer durante a requisição do visitante, que era justamente o que a fila existia para evitar.

Saber que algo falhou

Cadastre um e-mail na tarefa agendada para receber a saída — sem isso, ela falha em silêncio. Mantenha a tabela de trabalhos que falharam ativa e olhe para ela de tempos em tempos: fila que para de funcionar raramente avisa, e o sintoma aparece como e-mail que não chegou ou pedido que não processou, dias depois.

Hospedagem gerenciada a partir de R$6,90/mês

Comece agora