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
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.shCron com Comando (Crontab de Usuario)
Experimente →Verificacao de saude a cada 5 minutos (formato crontab de usuario).
*/5 * * * * curl -s http://localhost/healthDicas
- 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.