Expressão cron explicada
A ferramenta funciona nos dois sentidos: digite um agendamento no formato crontab para vê-lo explicado, ou descreva o agendamento com palavras para receber a expressão.
Cinco campos: minuto, hora, dia do mês, mês e dia da semana. Um sexto campo para segundos pode vir primeiro.
Exemplos
Significa
A cada 15 minutos de 5 a 59, durante as horas 9–17, em cada segunda-feira–sexta-feira
Campo por campo
| Campo | Expressão | Valores |
|---|---|---|
| Minuto | 5-59/15 | 5, 20, 35, 50 |
| Hora | 9-17 | 9, 10, 11, 12, 13, 14, 15, 16, 17 |
| Dia do mês | * | todos |
| Mês | * | todos |
| Dia da semana | MON-FRI | segunda-feira, terça-feira, quarta-feira, quinta-feira, sexta-feira |
Próximas execuções
…
O horário de verão é tratado como no Vixie cron e no cronie: um horário fixo roda uma vez mesmo que a hora seja pulada ou repetida, enquanto tarefas com * nos minutos ou nas horas seguem o novo relógio.
Como funciona
Uma expressão cron tem cinco campos separados por espaços: minuto (0–59), hora (0–23), dia do mês (1–31), mês (1–12) e dia da semana (0–7, em que tanto 0 quanto 7 são domingo). A cada minuto, o cron verifica se o relógio corresponde a todos os campos e, se corresponder, inicia a tarefa.
Em cada campo, * significa todos os valores, 1-5 um intervalo, 1,15 uma lista e */15 um valor a cada quinze. Os passos também podem ser combinados com intervalos: 5-59/15 dá os minutos 5, 20, 35 e 50. Meses e dias da semana podem ser escritos com abreviações em inglês, JAN–DEC e SUN–SAT.
Quando o dia do mês e o dia da semana estão ambos restritos, basta que um deles corresponda. Por isso 0 0 13 * 5 roda no dia 13 de todo mês e em toda sexta-feira, e não só na sexta-feira 13. A regra vem do Vixie cron e vale na maioria dos sistemas Linux. Se um dos campos começar com *, mesmo com um passo como */2, os dois precisam corresponder.
As macros @hourly, @daily, @weekly, @monthly e @yearly (ou @annually) são atalhos para agendamentos comuns, e @reboot roda a tarefa uma vez quando o cron inicia. Um sexto campo para segundos no início, ? para “qualquer dia” e L para o último dia do mês vêm do Quartz, do Spring e de agendadores parecidos, e o crontab comum não os entende.
O cron segue o horário local do computador. Quando começa o horário de verão e o relógio pula de 2 h para 3 h, uma tarefa com horário fixo dentro da hora pulada roda logo depois da mudança, e quando o relógio é atrasado ela roda só uma vez. Tarefas com * no campo de minutos ou de horas seguem o novo relógio. A lista aqui funciona do mesmo jeito, no seu fuso horário ou em UTC.
Confira qual implementação executa o seu agendamento. Serviços de nuvem costumam ter variantes próprias: o AWS EventBridge, por exemplo, tem seis campos com o ano no fim e exige ? no dia do mês ou no dia da semana, e muitos serviços trabalham em UTC em vez do horário local.
No sentido contrário, você pode descrever o agendamento com palavras: “toda segunda-feira às 9”, “a cada 15 minutos”, “no primeiro dia do mês às 2h30”, “nos dias úteis entre 9 e 17” ou “no último dia do mês à meia-noite”. Horários são lidos como 9, 9.30, 9:30 e 09h30, intervalos como 9–17 e listas como 1, 15. Quando a frase é entendida, a expressão aparece na hora, e a explicação acima diz com palavras o que ela significa, para você conferir se é o que queria. Quando não é entendida, aparecem as palavras que não puderam ser lidas, em vez de um palpite.
O construtor abaixo da caixa de texto faz o mesmo com controles em vez de palavras, e os dois andam juntos: uma frase preenche os controles, e cada mudança nos controles reescreve a expressão. Nem tudo pode ser expresso em cron. Não há como dizer “a primeira segunda-feira do mês” ou “semana sim, semana não” no crontab comum, e dois horários diferentes na mesma frase (às 9 e às 17) são escritos como uma lista no campo das horas: 0 9,17 * * *.