Como ler uma linha do crontab

Uma expressão cron tem cinco campos: minuto (0-59), hora (0-23), dia do mês (1-31), mês (1-12) e dia da semana (0-7, em que 0 e 7 são domingo). O asterisco significa “qualquer”, a vírgula separa valores, o hífen indica um intervalo e a barra um passo: */15 nos minutos significa 0, 15, 30 e 45.

Assim, 0 9 * * 1-5 executa a tarefa às 9:00 de segunda a sexta, 30 2 1 * * às 2:30 do primeiro dia de cada mês, */10 * * * * a cada dez minutos. As macros são atalhos: @daily equivale a 0 0 * * *, @hourly a 0 * * * *, @weekly a 0 0 * * 0.

Uma exceção surpreende muita gente: se tanto o dia do mês quanto o dia da semana forem diferentes de *, o cron executa a tarefa quando qualquer um dos dois for verdadeiro. 0 12 1 * 1 não quer dizer “no dia 1 se for segunda”, e sim “todo dia 1 e toda segunda-feira”.

Erros comuns

  • Escrever * * * * * pensando em “uma vez por dia”: significa a cada minuto.
  • Esquecer que o cron usa o fuso horário do servidor, não o de quem olha: aqui as próximas execuções estão no fuso do seu navegador.
  • Esperar uma tarefa no dia 31 de todo mês: nos meses de 30 dias e em fevereiro ela simplesmente não roda.

Perguntas frequentes

O cron aceita segundos?

O cron clássico não: a menor unidade é o minuto. Alguns sistemas, como Quartz ou Spring, acrescentam um sexto campo para os segundos, com outra sintaxe.

O que acontece com o horário de verão?

Na noite em que o relógio é adiantado, uma tarefa às 2:30 pode ser pulada; quando é atrasado, pode rodar duas vezes. Por isso tarefas importantes são agendadas fora da faixa das 2 às 3 ou em UTC.

Posso usar nomes de dias e meses?

Sim: MON-FRI para os dias e JAN-DEC para os meses, em inglês e sem diferenciar maiúsculas de minúsculas.

Como funciona este cálculo

Cada campo é expandido no conjunto de valores permitidos: * é o intervalo inteiro, a-b um intervalo, x/n os valores a partir de x em passos de n, e listas separadas por vírgulas são unidas. No dia da semana, 7 vira 0 (domingo). Um dia serve se o mês é permitido e, quando os dois campos de dia estão restritos, se o dia do mês ou o dia da semana serve. As próximas execuções são procuradas dia a dia, até oito anos à frente, no fuso horário do navegador.