Expressões Cron Explicadas: 15 Agendamentos Reais e as Armadilhas de Fuso Horário
A sintaxe do cron cabe em uma linha e, mesmo assim, pega todo mundo em algum momento, geralmente às 2 da manhã na noite em que o horário de verão muda. Veja como funcionam os cinco campos, uma lista de agendamentos para copiar e as armadilhas que vale conhecer.
Os cinco campos
┌──────── minute (0–59)
│ ┌────── hour (0–23)
│ │ ┌──── day of month (1–31)
│ │ │ ┌── month (1–12)
│ │ │ │ ┌ day of week (0–6, Sunday = 0)
* * * * *
Cada campo aceita um valor (5), uma lista (1,15), um intervalo (1-5), um passo (*/10) ou * para todos os valores. Alguns sistemas (Quartz, AWS EventBridge) adicionam um campo de segundos ou de ano. Confira qual versão você está usando.
Agendamentos para copiar
| Expressão | Executa |
|---|---|
*/5 * * * * | A cada 5 minutos |
0 * * * * | A cada hora, em ponto |
15 */2 * * * | Aos 15 minutos, a cada 2 horas |
0 9 * * * | Todo dia às 09:00 |
30 2 * * * | Todo dia às 02:30 (veja a armadilha do horário de verão abaixo) |
0 9 * * 1-5 | Dias úteis às 09:00 |
0 18 * * 5 | Sextas-feiras às 18:00 |
0 0 * * 0 | Domingos à meia-noite |
0 0 1 * * | Primeiro dia de cada mês |
0 0 1 1 * | Uma vez por ano, em 1º de janeiro |
0 8 1,15 * * | Dias 1 e 15 às 08:00 |
*/15 9-17 * * 1-5 | A cada 15 minutos no horário comercial |
0 0 * * 6,0 | Meia-noite nos fins de semana |
0 3 * 1,4,7,10 * | Todo dia às 03:00 no primeiro mês de cada trimestre |
0 12 * * * | Todo dia ao meio-dia |
Monte ou traduza qualquer expressão para português simples com o Gerador de Expressões Cron, que também mostra os próximos horários de execução.
A armadilha do dia do mês x dia da semana
Quando os campos de dia do mês e dia da semana estão ambos restritos, o cron padrão executa quando qualquer um dos dois coincide, não os dois ao mesmo tempo. 0 9 13 * 5 roda no dia 13 de todo mês e em toda sexta-feira, não só na sexta-feira 13. Para rodar no último dia útil ou na primeira segunda-feira, agende o job diariamente e verifique a data no seu script, ou use um agendador com extensões como L e #.
Fusos horários e horário de verão
- Servidores e CI rodam em UTC. Os agendamentos do GitHub Actions, a maioria dos containers e os agendadores de nuvem usam UTC. 09:00 em Nova York é
0 14 * * *no inverno e0 13 * * *no horário de verão. Converta com o Conversor de Fuso Horário, ou veja vários fusos ao mesmo tempo no Relógio Mundial. - Jobs entre 01:00 e 03:00 no horário local são arriscados. Quando os relógios avançam, 02:30 não existe e o job pode ser pulado; quando voltam, ele pode rodar duas vezes. Agende os jobs críticos fora dessa janela, ou rode o agendador em UTC.
- Agendamentos do GitHub Actions podem atrasar alguns minutos em horários de pico e são desativados em repositórios sem atividade por 60 dias. Gere um workflow com o Gerador de GitHub Actions.