Analisador de Expressões Cron e Próximas Execuções

Analisa uma expressão cron (minuto hora dia mês dia da semana) e mostra o agendamento em linguagem simples. Suporta passos, intervalos e listas, e calcula as próximas 5 execuções. Útil para ler um crontab ou o "schedule" do GitHub Actions.

Sintaxe da expressão cron (5 campos)

Uma expressão cron tem 5 campos separados por espaço, da esquerda para a direita: minuto, hora, dia do mês, mês e dia da semana. Cada campo aceita os caracteres especiais abaixo.

Posição Campo Valores permitidos
1 Minuto 0-59
2 Hora 0-23
3 Dia do mês 1-31
4 Mês 1-12
5 Dia da semana 0-7

O dia da semana costuma ser 0 = domingo a 6 = sábado, mas esta ferramenta também aceita 7 como alias de domingo, usado por algumas implementações de cron (é tratado igual ao 0).

Cada campo aceita "*" (qualquer valor), listas separadas por vírgula (1,15,30), intervalos com hífen (1-5) e passos com barra (*/15, 1-30/5), podendo ser livremente combinados.

Padrões cron comuns

Expressão cron Significado
* * * * * Executa a cada minuto.
*/5 * * * * Executa a cada 5 minutos.
0 * * * * Executa uma vez por hora, no minuto 0.
0 0 * * * Executa todos os dias à meia-noite (00:00).
0 9 * * 1-5 Executa às 9h nos dias úteis (segunda a sexta).
0 0 1 * * Executa à meia-noite no dia 1 de cada mês.
0 0 1 1 * Executa à meia-noite em 1º de janeiro de cada ano.
*/15 9-17 * * 1-5 Executa a cada 15 minutos entre 9h e 17h nos dias úteis.

O que é uma expressão cron

Uma expressão cron declara numa só linha quando deve ser executada uma tarefa repetida. Cinco campos — minuto, hora, dia do mês, mês e dia da semana — dispõem-se a partir da esquerda separados por espaços, e cada um pode combinar * para todos os valores, uma lista separada por vírgulas, um intervalo com hífen e um passo com barra. Assim, */15 9-17 * * 1-5 significa «a cada quinze minutos das nove às cinco, de segunda a sexta».

Esta ferramenta analisa o que você escrever e, **depois de enunciar o agendamento em palavras, calcula as cinco próximas vezes em que será executado** a contar de agora. O detalhamento por campos aparece ao lado, de modo que se vê qual parte está agindo. O dia da semana vai de 0 para domingo a 6 para sábado como norma, mas também se admite a forma 7 para domingo que algumas implementações usam, tratada internamente como 0. A busca por execuções futuras alcança cerca de quatro anos; se nada coincidir dentro desse prazo, isso é dito com clareza.

Como usar o analisador de cron

  1. Escreva a expressão Dê os cinco campos — minuto, hora, dia, mês e dia da semana — separados por espaços. Um número de campos errado, ou um valor fora de faixa, provoca um aviso.
  2. Clique em «analisar» O sentido do agendamento aparece em palavras. Confira aqui primeiro que não leu mal a sua própria expressão.
  3. Reveja o detalhamento por campos Enumera-se o que representa cada um de minuto, hora, dia, mês e dia da semana. Denuncia qualquer campo com um valor que você não pretendia.
  4. Leia as próximas execuções Os cinco momentos seguintes são dados como datas e horas. Um descompasso com o pretendido — fixar o dia 31 em meses que não o têm, por exemplo — aparece como datas concretas.
  5. Tome emprestado dos padrões habituais Uma tabela reúne os mais comuns: a cada minuto, a cada cinco minutos, na hora cheia, às nove em dias úteis. Partir do mais próximo e modificá-lo é o caminho rápido.

Dicas para aproveitar melhor

  • Os campos podem combinar livremente listas com vírgula, intervalos com hífen e passos com barra, como em "*/15 9-17 * * 1-5".
  • O dia da semana costuma ser 0-6 (domingo a sábado), mas esta ferramenta também aceita o 7 como alias comum de domingo em algumas implementações de cron.
  • Se tanto o dia do mês quanto o dia da semana estiverem restritos (diferentes de "*"), o cron padrão os trata como uma condição OR: a tarefa executa se qualquer um dos dois for satisfeito.
  • O gatilho "schedule" do GitHub Actions usa a mesma sintaxe cron de 5 campos desta ferramenta, então também serve para conferir exatamente quando um workflow será executado.
  • O horário real de execução depende do fuso horário configurado no servidor, por isso vale a pena conferir também a hora atual do servidor depois de editar um crontab.

Onde o analisador de cron ajuda

Confirmar o sentido antes de levá-lo ao crontab

Analisá-lo antes de registrá-lo num servidor evita o percalço de uma tarefa correr muito mais vezes do que se pretendia, ou não correr nunca.

Conferir um agendamento do GitHub Actions

A expressão sob schedule de um fluxo de trabalho usa a mesma notação de cinco campos. A lista de próximas execuções mostra se o intervalo é o pretendido.

Decifrar a expressão de outra pessoa

Quando uma configuração herdada contém algo como 0 */6 * * *, passá-la a palavras diz-lhe na hora a que horas ela dispara.

Investigar uma execução que se desviou

Quando uma tarefa não correu na hora em que devia, a lista de próximas execuções separa «a causa é a própria expressão» de «a causa é outra».

Quando quiser contar os dias entre execuções

Para contar quanto falta para a próxima, use o cronômetro de contagem regressiva; para contar em dias úteis, o cálculo de dias úteis.

Termos sobre cron

cron
O mecanismo dos sistemas do tipo Unix para executar tarefas repetidamente em horas fixadas. A tabela que emparelha cada tarefa com o seu horário chama-se crontab.
Campo
Cada elemento de uma expressão cron, separado por espaços. Da esquerda para a direita são minuto (0–59), hora (0–23), dia do mês (1–31), mês (1–12) e dia da semana (0–6).
Asterisco
Representa todos os valores que o campo pode tomar. Posto no minuto significa a cada minuto; no mês, a cada mês.
Passo
Escreve-se como */15 e afins para indicar um intervalo. Toma valores ao longo da faixa com uma passada fixa: a cada quinze minutos, por exemplo.
Faixa
Escreve-se como 1-5 para tomar juntos vários valores consecutivos. No campo do dia da semana isso é de segunda a sexta; no da hora, da uma às cinco.
Numeração do dia da semana
0 é domingo e 6 é sábado. Algumas implementações admitem ainda 7 para domingo, e esta ferramenta trata o 7 igual ao 0.
Fuso horário
O cron é lido de ordinário na hora do ambiente onde corre. Se o relógio de um servidor não estiver como você supõe, a mesma expressão disparará a outra hora.

Perguntas frequentes

Sim. A especificação padrão do cron usa 0 para domingo, mas algumas implementações (como o Vixie cron) também aceitam 7 como notação alternativa para domingo. Esta ferramenta interpreta ambos como domingo.

Não é uma questão de prioridade, e sim uma condição OR. Quando tanto o dia do mês quanto o dia da semana estão restritos (diferentes de "*"), a tarefa executa em qualquer dia que satisfaça uma das duas condições. Se apenas um campo estiver restrito, só essa condição vale.

O formato básico de 5 campos (minuto hora dia mês dia da semana) é o mesmo. A principal diferença é que os agendamentos do GitHub Actions são sempre avaliados em UTC, e a execução real pode atrasar de alguns minutos a dezenas de minutos, diferente do crontab de um servidor.

Sim, passos (um valor inicial com barra, ou */intervalo) podem ser usados em qualquer um dos cinco campos. Ainda assim, em campos com intervalo pequeno, como mês ou dia da semana, as combinações práticas são limitadas.
Tool-kun

Curiosidade — Meio século de cron

Diz-se que o nome "cron" vem de Chronos, a palavra grega para tempo, e ele é o agendador de tarefas clássico desde os primórdios do UNIX, na década de 1970. Sua sintaxe compacta de cinco campos consegue expressar desde "a cada minuto" até "uma data e hora específicas uma vez por ano", e continua amplamente usada quase meio século depois.

Hoje, essa mesma sintaxe cron de 5 campos é usada não só nos crontabs de servidores Linux, mas também em diversas ferramentas de CI/CD e plataformas de contêineres, como GitHub Actions, GitLab CI e os CronJobs do Kubernetes. É um exemplo marcante de uma sintaxe criada na era UNIX que continua prosperando, sem mudanças, em ambientes cloud-native.

Um dos pontos mais confusos da sintaxe cron é o comportamento quando dia do mês e dia da semana são definidos juntos. É tentador presumir uma condição AND (que ambos sejam satisfeitos), mas a especificação real é uma condição OR (que qualquer um dos dois seja satisfeito), o que costuma causar execuções mais frequentes do que o esperado.