Próximas execuções
Cada agendador trata de forma diferente detalhes como dia do mês versus dia da semana e horário de verão. Teste o agendamento no seu sistema antes de usá-lo em produção.
Este gerador de expressões cron explica qualquer agendamento de crontab em linguagem simples e lista as próximas 10 execuções no fuso horário que você escolher. Monte o agendamento campo a campo ou cole um de crontab, CronJob do Kubernetes, GitHub Actions, Quartz ou Spring @Scheduled, e alterne entre as sintaxes Unix, Quartz e Spring.
Como usar
- Digite ou cole uma expressão cron, ou toque num atalho. O formato segue o número de campos: 5 é crontab Unix, 6 é Spring (com segundos), 7 ou um ? é Quartz.
- Leia a descrição em linguagem simples e as 10 próximas execuções. Escolha um fuso horário para ver quando roda lá; toque num horário para copiá-lo em ISO 8601.
- Use o editor visual para mudar um campo por vez: todos os valores, um intervalo, valores específicos ou uma faixa.
- Ao alternar entre Unix, Quartz e Spring a expressão é convertida quando possível.
- No cron Unix, se dia do mês e dia da semana estiverem restritos, a tarefa roda quando qualquer um coincide (OU). O Quartz exige ? em um deles; o Spring exige que os dois coincidam.
- No Unix os dias da semana vão de 0 a 7 (0 e 7 = domingo); o Quartz usa 1–7 com 1 = domingo. Nomes como MON-FRI funcionam em todos.
- Quartz e Spring também aceitam L (último dia), W (dia útil mais próximo), 5L (última sexta) e 2#1 (primeira segunda).
- Horários que caem no salto do horário de verão são pulados; cada daemon cron trata isso de um jeito.
Os cinco campos do Unix
Uma linha padrão de crontab tem cinco campos: minuto (0–59), hora (0–23), dia do mês (1–31), mês (1–12 ou JAN–DEC) e dia da semana (0–7, em que 0 e 7 são domingo, ou SUN–SAT). * significa todos os valores, a vírgula lista valores (1,15), o hífen dá um intervalo (9-17) e a barra define um passo (*/15 equivale a 0, 15, 30 e 45).
Assim, 30 2 * * 1-5 roda às 02:30 de segunda a sexta, e 0 */6 * * * roda às 00:00, 06:00, 12:00 e 18:00. Os atalhos @hourly, @daily, @weekly e @monthly equivalem a 0 * * * *, 0 0 * * *, 0 0 * * 0 e 0 0 1 * *.
Diferenças do Quartz e do Spring
O Quartz acrescenta um campo de segundos no início e um ano opcional no fim, numera os dias da semana de 1 a 7 a partir do domingo e exige ? no dia do mês ou no dia da semana. O Spring @Scheduled usa seis campos (segundos primeiro) e dias 0–7. Os dois aceitam L para o último dia, W para o dia útil mais próximo, 6L para a última sexta e 2#1 para a primeira segunda do mês.
Armadilhas
No cron do Unix, se o dia do mês e o dia da semana forem restritos ao mesmo tempo, o job roda quando qualquer um bater: 0 0 13 * 5 dispara em todo dia 13 e em toda sexta, não só na sexta-feira 13. Daemons de cron usam o fuso do servidor, a menos que você diga outro, e o GitHub Actions sempre usa UTC. Nas trocas de horário de verão, um job às 02:30 pode ser pulado ou rodar duas vezes, conforme a implementação, então prefira UTC para tarefas críticas.
Perguntas frequentes
O que significa * * * * *?
Que roda a cada minuto de cada hora de cada dia: 1440 vezes por dia. Cada * representa todos os valores do seu campo, na ordem minuto, hora, dia do mês, mês e dia da semana.
Como rodo um cron a cada 5 minutos?
Use */5 * * * *. Ele dispara nos minutos 0, 5, 10 e assim por diante até 55, ou seja, 288 vezes por dia. Para começar em outro minuto, use por exemplo 2-59/5 * * * *.
Qual fuso horário o cron usa?
O cron clássico usa o fuso local do servidor. Alguns sistemas aceitam CRON_TZ ou uma opção timeZone, CronJobs do Kubernetes têm o campo timeZone e o GitHub Actions usa sempre UTC. Escolha o fuso aqui para ver os horários correspondentes.
Qual a diferença entre o cron do Unix e o do Quartz?
O do Unix tem 5 campos e começa pelos minutos. O do Quartz tem 6 ou 7, começa pelos segundos e pode terminar com o ano, numera o domingo como 1 e precisa de ? em um dos dois campos de dia.
Como agendo um job no último dia do mês?
Quartz e Spring aceitam L no dia do mês: 0 0 0 L * ? no Quartz. O cron padrão do Unix não tem L; o truque comum é rodar nos dias 28 a 31 e verificar no script se amanhã é dia 1.
Por que meu cron não rodou no horário esperado?
Confira o fuso do servidor, se dia do mês e dia da semana não foram combinados por engano e se o comando funciona no ambiente mínimo do cron, onde o PATH e as variáveis são diferentes do seu terminal.