Parser de Expressoes Cron

Expressoes cron definem agendamentos para tarefas recorrentes em sistemas tipo Unix. Esta ferramenta analisa a sintaxe cron (5-7 campos), explica cada campo em portugues simples, calcula os proximos horarios de execucao agendados e avisa sobre erros comuns. Suporta tanto o formato crontab de usuario quanto o formato crontab de sistema com campos de usuario e comando.

Especificacoes

Casos de Uso Comuns

  • Depurar por que um job cron nao esta executando nos horarios esperados
  • Entender expressoes cron herdadas em configuracoes
  • Planejar agendamentos de backup e manutencao
  • Verificar agendamentos de pipeline CI/CD (GitHub Actions, GitLab CI)
  • Testar agendamentos de CronJob do Kubernetes antes do deploy
  • Analisar entradas de crontab do sistema de /etc/crontab ou /etc/cron.d/

Funcionalidades

  • Analisar expressoes cron de 5 campos (padrao), 6 campos (com segundos) e 7 campos (com segundos e ano)
  • Suportar formato crontab de sistema com campo de usuario (ex.: "0 5 * * * root /path/to/script")
  • Extrair e exibir comando de linhas cron
  • Explicar cada campo em linguagem legivel por humanos
  • Calcular os proximos 10 horarios de execucao agendados
  • Suporte para intervalos (1-5), listas (1,3,5), passos (*/15) e nomes (MON, JAN)
  • Avisar sobre problemas comuns como especificar dia 31 em um agendamento

Exemplos

Todos os Dias Uteis as 9h

Experimente →

Executa as 9:00 de segunda a sexta-feira.

0 9 * * 1-5

A Cada 15 Minutos

Experimente →

Executa nos minutos 0, 15, 30 e 45 de cada hora.

*/15 * * * *

Crontab de Sistema com Usuario e Comando

Experimente →

Backup diario as 5h executando como usuario root (formato crontab de sistema de /etc/crontab).

0 5 * * * root /usr/bin/backup.sh

Cron com Comando (Crontab de Usuario)

Experimente →

Verificacao de saude a cada 5 minutos (formato crontab de usuario).

*/5 * * * * curl -s http://localhost/health

Mensal no Primeiro Dia

Experimente →

Executa a meia-noite no primeiro dia de cada mes.

0 0 1 * *

Dicas

  • Os cinco campos sao: minuto (0-59), hora (0-23), dia do mes (1-31), mes (1-12), dia da semana (0-6, Domingo=0).
  • O crontab do sistema (/etc/crontab, /etc/cron.d/*) tem um 6o campo para nome de usuario antes do comando.
  • Crontabs de usuario (crontab -e) nao tem campo de nome de usuario; executam como o dono do crontab.
  • Use * para "todos" e */n para "a cada n".
  • Nomes de dias (SUN-SAT) e nomes de meses (JAN-DEC) nao diferenciam maiusculas/minusculas.
  • Tenha cuidado ao usar dia-do-mes e dia-da-semana juntos; o comportamento varia entre implementacoes.

Entendendo Parser de Expressoes Cron

Cron e o agendador de tarefas baseado em tempo em sistemas operacionais tipo Unix, e expressoes cron sao a sintaxe compacta para definir quando um job executa. O formato padrao de cinco campos especifica minuto (0-59), hora (0-23), dia do mes (1-31), mes (1-12) e dia da semana (0-6, onde 0 e Domingo). Um asterisco (*) corresponde a todos os valores, fazendo "* * * * *" executar a cada minuto.

Alem de valores simples, cron suporta varios operadores. Intervalos (1-5) correspondem a uma faixa continua. Listas (1,3,5) correspondem a valores discretos. Valores de passo (*/15) criam intervalos regulares. Estes se combinam: 1-5/2 no dia-da-semana significa segunda, quarta, sexta. Campos de mes e dia-da-semana aceitam nomes de tres letras (JAN-DEC, SUN-SAT).

Implementacoes de cron variam. Crontabs de usuario tem cinco campos mais o comando. Crontabs de sistema adicionam um campo de nome de usuario. Algumas implementacoes suportam um sexto campo para segundos (Spring, Quartz, Kubernetes) e um setimo para ano. AWS EventBridge, GitHub Actions e outros agendadores em nuvem cada um tem suas proprias variacoes.

Armadilhas comuns incluem a interacao entre os campos dia-do-mes e dia-da-semana: se ambos sao especificados (nao *), o job executa quando qualquer condicao e verdadeira (logica OU). Tratamento de fuso horario e outra questao — jobs cron executam no fuso horario do sistema a menos que CRON_TZ seja definido, e transicoes de horario de verao podem fazer jobs serem pulados ou executarem duas vezes.

O operador / cria valores de passo. */5 no campo de minuto significa "a cada 5o minuto" e produz execucoes nos minutos 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50 e 55 de cada hora. Intervalos podem ser combinados com passos: 10-30/5 significa a cada 5 minutos entre o minuto 10 e o minuto 30. Para executar um job em um horario especifico em dias especificos, defina os campos de minuto e hora para o horario desejado e o campo dia-da-semana para os dias alvo. Por exemplo, "30 14 * * 1-5" executa as 14:30 de segunda a sexta, e "0 9 * * 0" executa as 9h todo domingo. Todos os horarios sao interpretados no fuso horario local do servidor a menos que CRON_TZ seja explicitamente configurado.

Cron usa horario de relogio de parede, o que significa que transicoes de horario de verao podem causar comportamento inesperado. Quando os relogios adiantam, jobs agendados entre 2:00 e 2:59 podem ser completamente pulados. Quando os relogios atrasam, jobs naquele intervalo podem executar duas vezes. Para jobs criticos, definir CRON_TZ=UTC evita esses problemas. Alternativamente, evite agendar jobs durante a janela de transicao, ou projete jobs para serem idempotentes para que execucoes duplicadas sejam inofensivas.

A sintaxe cron foi adotada muito alem de sistemas Unix. Kubernetes CronJobs, GitHub Actions, GitLab CI, AWS EventBridge, Google Cloud Scheduler, Spring @Scheduled e muitas bibliotecas de filas de tarefas todas usam expressoes cron para agendamento. No entanto, cada implementacao pode suportar recursos diferentes — algumas adicionam um campo de segundos, algumas adicionam um campo de ano, e algumas usam ? para significar "nenhum valor especifico" nos campos dia-do-mes ou dia-da-semana.

← Voltar para todas as ferramentas