Crontab Guru

Cole uma expressão cron e obtenha uma explicação campo por campo, em inglês simples, do que ela faz. Sem precisar lembrar a ordem dos campos ou consultar os intervalos: o guru percorre cada um dos cinco campos (minuto, hora, dia do mês, mês e dia da semana) e lê a expressão da esquerda para a direita. Útil para conferir uma linha de crontab antes de implantá-la ou para explicar uma linha herdada.

Como usar o guru

  1. 1

    Cole a expressão

    Copie qualquer expressão cron padrão de 5 campos (por exemplo `0 9 * * 1-5`) para o campo de entrada.

  2. 2

    Peça a explicação

    Clique em Explain Cron e a ferramenta retorna uma descrição linha por linha de cada campo: minuto, hora, dia do mês, mês e dia da semana.

  3. 3

    Leia a descrição

    A explicação é gerada em inglês, por exemplo "Minute: every 5 minutes" ou "Hour: from 9 through 17."

  4. 4

    Confira antes de implantar

    Use a explicação para confirmar que o cronograma faz o que você deseja antes de colocá-lo no seu crontab, na configuração de CI ou em um manifesto Kubernetes.

Folha de dicas dos campos

 ┌───────────── minuto (0-59)
 │ ┌─────────── hora (0-23)
 │ │ ┌───────── dia do mês (1-31)
 │ │ │ ┌─────── mês (1-12 ou JAN-DEC)
 │ │ │ │ ┌───── dia da semana (0-6 ou SUN-SAT; Dom = 0 ou 7)
 │ │ │ │ │
 * * * * *

Operadores em expressões cron

Operador Significado Exemplo
* Todo valor * * * * *
, Lista de valores 0,15,30,45
- Intervalo 9-17
/ Passo (início/passo) */5, 0-30/5
L Último (dia do mês ou último dia da semana, Quartz) L, 5L
W Dia útil mais próximo 15W (Quartz)
# N-ésimo dia da semana do mês 1#3 (Quartz)
? Sem valor específico Apenas Quartz

A ordem de leitura importa

0 */2 * * 1-5 é lido da esquerda para a direita como: minuto 0, a cada 2 horas, qualquer dia do mês, qualquer mês, de segunda a sexta. Por hábito, às vezes se lê os campos da direita para a esquerda e isso confunde; comece sempre pelo minuto.

A armadilha “a cada X minutos”

*/10 * * * * dispara nos minutos 0, 10, 20, 30, 40, 50, não “a cada 10 minutos a partir de quando o trabalho foi criado.” Os passos do cron sempre medem a partir do início do intervalo do campo. Se você implantar um trabalho às 12:03, a primeira execução será às 12:10, não às 12:13.

Para trabalhos que realmente precisam de “N minutos após a última execução,” use um agendador com um temporizador persistente (temporizadores systemd com OnUnitActiveSec, ou agendamento em nível de aplicativo com um timestamp da última execução armazenado).

Armadilhas do cron que vale conhecer

  • Dia do mês + dia da semana ambos definidos: a maioria das implementações de cron trata isso como comportamento OR, provavelmente não é o que você deseja.
  • Passo de 0: */0 é inválido.
  • Intervalo se enrola: 22-2 para horas não funciona no cron clássico; use 22-23,0-2.
  • Fevereiro 30: uma programação como 0 0 30 2 * nunca dispara.
  • Ambiguidade do DST: trabalhos agendados entre 2h e 3h da manhã podem disparar duas vezes ou zero vezes em dias de transição do horário de verão.

Cron vs. agendadores modernos

O cron Unix ainda está em toda parte, mas para qualquer coisa crítica você provavelmente quer:

  • temporizadores systemd: capturam execuções perdidas, suportam deslocamentos aleatórios, leem de arquivos de unidade.
  • Kubernetes CronJob: declarativo, tentativas, ciente de fuso horário na versão 1.25+.
  • Airflow / Prefect / Dagster: para trabalhos com dependências, tentativas, backfills, observabilidade.
  • GitHub Actions schedule: cron de 5 campos, apenas UTC, intervalo mínimo de 5 minutos, entrega de melhor esforço.

O cron em si é um ótimo formato, mas um agendador ruim para trabalhos que não podem falhar.

Perguntas frequentes

Porque o dia da semana 0 é domingo no cron padrão (e 7 também é domingo, suportando ambas as convenções). A segunda-feira é 1. O Quartz numera os dias da semana de 1 a 7 com domingo = 1, o que frequentemente confunde quem transita entre dialetos.

O cron Unix clássico roda no fuso horário local do servidor, o que quer que /etc/timezone diga. Kubernetes CronJob, GitHub Actions e a maioria dos agendadores em nuvem rodam em UTC por padrão. Sempre confirme e, quando possível, use UTC para evitar surpresas do horário de verão.

O cron clássico não pode expressar isso diretamente. Solução alternativa: execute toda segunda-feira e verifique a data dentro do script: [ $(date +%d) -le 7 ] && ./job.sh. O Quartz suporta isso nativamente com 1#1.

Não. Cada agendamento precisa de sua própria linha. Mas você pode combinar vários agendamentos em uma linha com listas: 0 9,17 * * * roda às 9h e às 17h. Para agendamentos que não podem ser expressos como uma única linha, adicione várias linhas apontando para o mesmo comando.

Ferramentas relacionadas