Validador de Cron Expression
Valida uma expressão cron (5 ou 6 campos) e indica qual campo está incorreto. Aceita listas, ranges e steps.
Formato 5 campos: minuto, hora, dia, mês, dia da semana. Formato 6 campos: segundo + os 5 anteriores.
Expressoes cron: uma mini DSL para agendamento baseado em tempo
Cron e a lingua franca dos jobs recorrentes no Unix. Uma expressao cron e uma string compacta com cinco (as vezes seis ou sete) campos separados por espaco que descreve "quando" algo deve rodar. O agendador — crond, timer do systemd, CronJob do Kubernetes, scheduler do GitHub Actions, Vercel Cron — desperta a cada minuto e dispara toda entrada cujo padrao bata com o relogio atual.
Apesar da simplicidade aparente, a sintaxe esta cheia de surpresas especificas de cada dialeto: dia da semana 0-indexado vs 1-indexado, operadores exclusivos do Quartz (L, W, #), logica AND vs OR entre os campos de dia, e armadilhas de fuso horario. Este validador checa estrutura e ranges dos campos para voce pegar erros de sintaxe antes de subir em producao.
O formato classico Unix Vixie com 5 campos
O cron Vixie original, distribuido na maioria das distros Linux, usa cinco campos:
* * * * * comando
| | | | |
| | | | +-- dia da semana (0-6, 0=Domingo; ou SUN-SAT)
| | | +---- mes (1-12 ou JAN-DEC)
| | +------ dia do mes (1-31)
| +-------- hora (0-23)
+---------- minuto (0-59)
Operadores dentro de um campo:
*— qualquer valor.,— lista, ex.:1,15,30.-— intervalo, ex.:1-5./— passo, ex.:*/15(a cada 15) ou10-30/5.L,W,#— apenas no Quartz: ultimo dia, dia util mais proximo, n-esimo dia da semana do mes.
Exemplos comentados
0 9 * * 1-5— todo dia util as 09:00.*/15 * * * *— a cada 15 minutos.0 0 1 * *— todo dia 1 do mes a meia-noite.30 2 * * 0— todo domingo as 02:30.0 12 1 1 *— meio-dia de 1 de janeiro.0 0 * * 1#2— segunda-feira da segunda semana do mes (Quartz).
Dialetos: Vixie, Quartz, AWS, Kubernetes, GitHub
Nem todo cron e o mesmo cron:
- Unix Vixie cron — 5 campos, dia da semana 0-6 (Domingo=0 ou 7).
- Quartz (Java) — 6 ou 7 campos:
segundos minutos horas dom mes dow [ano], dia da semana 1-7 com Domingo=1. SuportaL(last),W(nearest weekday),#(n-esimo dia da semana). - AWS EventBridge — 6 campos, inclui ano, exige
?em dom ou dow. - Kubernetes CronJob — 5 campos puros, UTC por padrao; desde a 1.27 aceita
timeZonena spec. - GitHub Actions — 5 campos, somente UTC, intervalo minimo de 5 minutos e disparos podem ser pulados sob carga.
- Vercel Cron — 5 campos, UTC, ressalvas semelhantes.
Armadilhas comuns: dia da semana e logica dom+dow
Dois erros pegam quase todo dev:
- Domingo e 0 e tambem 7 no Vixie cron — aceito por compatibilidade com o cron original da AT&T. No Quartz Domingo e 1.
- dia do mes e dia da semana sao ORed, nao ANDed, quando ambos sao especificados.
0 0 13 * 5dispara em todo dia 13 e toda sexta — nao "sexta-feira 13". - Passo
*/0e invalido;0/15e forma exclusiva do Quartz. - Meses/dias da semana nomeados nao sao sensiveis a caixa, mas precisam ter tres letras (
JAN,MON).
O Brasil simplifica uma coisa: desde 2019 o pais aboliu o horario de verao, entao um job agendado para 02:30 BRT nao e pulado nem duplicado duas vezes por ano como aconteceria nos EUA ou na UE.
Ferramentas: validar, decodificar e prever proximos disparos
Bibliotecas e sites recomendados:
- crontab.guru — o decodificador visual canonico; cola uma expressao e mostra o significado em ingles.
- cronstrue (npm) — descricao legivel por humano em varios idiomas.
- cron-validator, cron-parser (npm) — parse, validacao e calculo de proximos disparos em Node.
- Quartz (Java) — dialeto Quartz completo com
CronExpression. - croniter (Python) — iteracao compativel com Vixie das proximas execucoes.
FAQ
5 ou 6 campos — qual usar?
Agendadores de sabor Unix (Vixie, GitHub Actions, Kubernetes, Vercel) querem 5 campos. Quartz e AWS EventBridge usam 6+; so adote esse formato se o seu runner explicitamente suporta.
A relacao entre dom e dow e AND ou OR?
OR. Quando ambos os campos sao restringidos, o job dispara sempre que qualquer uma das condicoes bater. Para expressar "sexta-feira 13" voce precisa restringir um deles e checar o outro dentro do job.
Como prever os proximos disparos antes de subir?
Cole a expressao no crontab.guru ou rode cron-parser em Node para enumerar os proximos N disparos. No GitHub Actions, dispare manualmente com o evento workflow_dispatch para testar.
Qual fuso horario e usado?
A maioria dos runners gerenciados (GitHub Actions, Vercel, AWS) executa em UTC. O crond Linux usa o fuso do sistema (/etc/localtime). Kubernetes 1.27+ suporta um campo explicito timeZone na spec do CronJob.
Por que meu cron no GitHub Actions atrasa as vezes?
O GitHub agenda workflows em best effort. Sob pico de carga, disparos podem atrasar varios minutos ou ate ser pulados. Para timing rigoroso, use um agendador dedicado.
Ferramentas Relacionadas
Validador de TOML
Verifica se um conteúdo TOML é sintaticamente válido. Mensagens de erro com linha e coluna.
Validador Cron Quartz Strict
Valide expressões cron no formato Quartz Scheduler (6 ou 7 campos), com suporte a ? L W # e ranges. Garanta que seus agendamentos Java/Spring estão corretos.
Validador de Base32
Verifica se uma string é Base32 válida (RFC 4648). Aceita padding =. Mostra tamanho do payload em bytes.