Analisador de Expressões Cron

Cinco campos separados por espaços, ou um atalho como @daily.

Você herda um crontab cheio de linhas como 0 */2 * * 1-5 e 30 3 * JAN,JUL 1. Este analisador expande cada campo nos valores exatos que ele abrange, então, em vez de adivinhar o que */2 cobre, você vê as doze horas que ele seleciona e a contagem ao lado delas. Você também recebe a forma normalizada de 5 campos, um aviso quando a expressão cai em uma armadilha conhecida e os próximos 5 horários de execução calculados no seu próprio fuso horário.

Como analisar uma expressão cron

  1. 1

    Cole a expressão

    Uma linha de 5 campos (`* * * * *`): minuto, hora, dia do mês, mês e dia da semana. Atalhos como `@daily` também funcionam.

  2. 2

    Leia os campos expandidos

    Cada campo aparece com os valores que ele abrange e com quantos são, então `*/2` no campo da hora mostra 0, 2, 4 e as outras nove que ele cobre.

  3. 3

    Confira a prévia das próximas execuções

    Os 5 próximos horários de disparo, calculados no seu navegador a partir do seu próprio fuso horário. Se não corresponderem à sua intenção, ajuste a expressão.

  4. 4

    Leia os avisos

    O analisador sinaliza as armadilhas: os dois campos de dia definidos ao mesmo tempo, uma data que nunca pode acontecer ou um operador que o cron padrão não entende.

No que cada campo se expande

Um campo não é um valor, é um conjunto. Saber o tamanho desse conjunto costuma responder à pergunta que trouxe você até aqui.

Campo Intervalo * abrange Observações
Minuto 0-59 60 valores A origem mais comum de tarefas descontroladas
Hora 0-23 24 valores Relógio de 24 horas, nunca de 1 a 12
Dia do mês 1-31 31 valores Meses curtos simplesmente pulam os dias que não existem
Mês 1-12 12 valores JAN a DEC também são aceitos
Dia da semana 0-7 7 valores 0 e 7 são ambos domingo

Operadores dentro de um campo: * todos os valores, 1,5,10 uma lista, 1-5 um intervalo, */15 um passo contado a partir do início do intervalo e 0-45/15 um passo dentro de um intervalo.

Nomes e atalhos são aceitos

Nomes de mês e de dia da semana são interpretados e expandidos para os números que representam, então 30 3 * JAN,JUL 1 informa mês 1, 7 e dia da semana 1. Os atalhos nomeados são expandidos para a forma de 5 campos antes de qualquer outra coisa:

Atalho Expande para Significado
@yearly, @annually 0 0 1 1 * Meia-noite de 1º de janeiro
@monthly 0 0 1 * * Meia-noite do dia 1º
@weekly 0 0 * * 0 Meia-noite de domingo
@daily, @midnight 0 0 * * * Meia-noite de todos os dias
@hourly 0 * * * * No minuto 0 de cada hora

@reboot também é reconhecido, mas não tem agendamento para expandir: ele é executado uma vez quando a máquina inicia, então não há horários de execução para prever.

Avisos que vale a pena ler

  • Os dois campos de dia restritos. 0 0 1 * MON não significa “no dia 1º, mas só se for uma segunda-feira”. O cron padrão trata os dois campos de dia como um OU lógico quando ambos estão restritos, então essa linha dispara no dia 1º de todo mês e em toda segunda-feira. O analisador levanta esse aviso, e a prévia das execuções segue a regra do OU.
  • Uma data que nunca acontece. 0 0 30 2 * pede 30 de fevereiro. A expressão é sintaticamente válida e o cron a aceita, mas ela nunca vai disparar. O analisador avisa isso em vez de mostrar uma lista vazia sem explicação.
  • Operadores do Quartz. L (último), W (dia útil mais próximo), # (enésimo dia da semana) e ? são extensões do Quartz, não do crontab padrão. Dentro de uma linha de 5 campos eles são reconhecidos e sinalizados, e o campo mostra que se trata de um operador do Quartz em vez de uma lista de valores. Nenhum horário de execução é calculado, porque o cron padrão simplesmente não executaria essa linha.

O que é rejeitado de imediato

  • O número errado de campos. Uma linha Quartz de 6 campos com segundos, ou de 7 campos com ano, é rejeitada pela contagem de campos.
  • Valores fora do intervalo, por exemplo minuto 75 ou mês 13.
  • Um intervalo decrescente como 5-1.
  • Um passo igual a zero, como */0.

Toda rejeição nomeia o campo e o valor que a causou, então você corrige uma coisa só em vez de reescrever a linha inteira.

Fuso horário

A prévia das próximas execuções é calculada no seu navegador, no fuso horário configurado no seu dispositivo. Um crontab roda no fuso horário da máquina que o hospeda, então, se esse servidor estiver em UTC e você não estiver (o horário de Brasília é UTC-3), ajuste os horários antes de comparar.

Perguntas frequentes

Como agendamento, não. Uma linha Quartz de 6 campos com segundos, ou de 7 campos com ano, é rejeitada pela contagem de campos. Os operadores do Quartz dentro de uma linha normal de 5 campos (L, W, #, ?) são um caso diferente: eles são reconhecidos e sinalizados, mas nenhum horário de execução é calculado, porque o cron padrão também não executaria essa linha.

As causas mais comuns são a diferença de fuso horário entre o seu dispositivo e o servidor que roda o crontab, ou os dois campos de dia definidos ao mesmo tempo. Quando o dia do mês e o dia da semana estão os dois restritos, o cron dispara quando qualquer um dos dois corresponder, e não os dois juntos, então 0 0 1 * MON roda muito mais vezes do que a maioria das pessoas espera. A contagem de valores ao lado de cada campo é a forma mais rápida de perceber um campo mais amplo do que você imaginava.

Pode. O Kubernetes usa a sintaxe padrão de 5 campos. O único ponto de atenção é o relógio: um CronJob roda no fuso horário do cluster (UTC, a menos que spec.timeZone indique outro), enquanto a prévia daqui usa o fuso horário do seu próprio dispositivo.

São atalhos nomeados que o cron do Linux aceita no lugar dos cinco campos. @daily (e também @midnight) é 0 0 * * *, @weekly é 0 0 * * 0, @monthly é 0 0 1 * *, @yearly (e também @annually) é 0 0 1 1 * e @hourly é 0 * * * *. Cole qualquer um deles e o analisador mostra a forma de 5 campos para a qual ele se expande. @reboot é a exceção: ele roda na inicialização, então não tem agendamento nem horários de execução.

Ferramentas relacionadas

Ferramenta disponível em outros idiomas