Todos os artigos

Expressões cron: como decifrar um agendamento de tarefas

Uma expressão cron é uma forma compacta de descrever o agendamento de execução recorrente de uma tarefa, usada em sistemas do tipo Unix desde os anos 1970. Cinco campos separados por espaços conseguem expressar praticamente qualquer agendamento regular.

Os cinco campos da expressão

Uma expressão cron padrão tem a forma minuto hora dia-do-mês mês dia-da-semana. Por exemplo, 30 14 * * 1 significa "às 14h30 toda segunda-feira" — os asteriscos significam "qualquer valor" para o dia do mês e o mês.

O significado de barras e vírgulas

Uma barra depois de um asterisco, como em */15 * * * *, significa "a cada 15 unidades" — nesse caso, a cada 15 minutos. Uma vírgula permite listar vários valores específicos; por exemplo, 0 9,18 * * * executa a tarefa duas vezes por dia: às 9:00 e às 18:00.

Por que o campo "dia da semana" confunde mais

No cron padrão, tanto o campo "dia do mês" quanto o "dia da semana" podem ser especificados ao mesmo tempo sem ser um asterisco — nesse caso, a tarefa é executada se pelo menos uma das duas condições for satisfeita (um OU lógico, não um E), o que contradiz a expectativa intuitiva da maioria das pessoas.

A mesma sintaxe, do crontab ao agendador do Laravel

O Brasil tem uma das maiores comunidades Laravel do mundo, e o agendador de tarefas do framework permite escrever chamadas fluentes como ->dailyAt('13:00') em routes/console.php — mas por baixo dos panos isso é traduzido exatamente para a mesma sintaxe cron de cinco campos. Entender a sintaxe cron bruta facilita muito depurar por que uma tarefa agendada rodou (ou não) em um horário inesperado.

Para que serve isso

  • Decifrar a expressão cron de outra pessoa em uma configuração de servidor ou pipeline de CI/CD.
  • Verificar se um agendamento escrito está correto antes de implantá-lo em produção.
  • Planejar o horário exato das próximas execuções de uma tarefa.

Horário de verão/inverno e cron

Se o agendador roda em um fuso com transição de horário de verão, uma tarefa agendada para um horário inexistente (por exemplo, 2h30 na noite em que os relógios avançam) pode não ser executada naquele dia, e uma agendada para um horário que se repete na volta pode ser executada duas vezes. O Brasil aboliu o horário de verão em 2019, mas o cuidado continua necessário para tarefas que rodam em servidores hospedados em outros países. Por isso, tarefas críticas costumam ser agendadas fora da janela típica de transição (por exemplo, à meia-noite ou às 3-4 da manhã) ou usam explicitamente o fuso UTC.

Experimentar a ferramenta