Quartz vs Cron Padrão: Diferenças Principais
Um guia conciso de decisão para escolher o dialeto cron certo e evitar incompatibilidades de parser.
Abrir Explicador QuartzPor que o Dialeto Cron Importa
A maioria dos erros de cron começa antes da implantação, quando a intenção do agendamento e a sintaxe divergem. Se você escreve uma expressão cron para um parser padrão de 5 campos e a implanta em um agendador baseado em Quartz, o resultado não é apenas um erro de sintaxe. Os campos mudam de posição, tokens são mal interpretados, e o agendamento pode disparar no horário completamente errado ou falhar silenciosamente sem feedback útil.
A confusão vem de um fato simples: não existe um único formato "cron". O crontab Unix original usa cinco campos (minuto, hora, dia do mês, mês, dia da semana). O Quartz Scheduler estende para seis ou sete campos adicionando segundos no início e um ano opcional no final. Ambos são chamados "expressões cron," mas são estruturalmente incompatíveis. Confundi-los é a causa número um de falhas de agendamento relacionadas a dialeto.
Este artigo explica as diferenças principais com exemplos práticos, verificações de validação e próximos passos claros no Cronwise. Cole qualquer expressão no Explicador Quartz para ver seu significado instantaneamente.
Estrutura de Campos: 5 Campos vs 7 Campos
A diferença mais fundamental entre os dois dialetos é o número de campos e suas posições. O cron padrão usa exatamente cinco campos:
| 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 (0 e 7 = Domingo) |
O cron Quartz adiciona um campo de segundos no início e um campo de ano opcional no final:
| Posição | Campo | Valores Permitidos |
|---|---|---|
| 1 | Segundos | 0-59 |
| 2 | Minutos | 0-59 |
| 3 | Horas | 0-23 |
| 4 | Dia do Mês | 1-31 |
| 5 | Mês | 1-12 ou JAN-DEC |
| 6 | Dia da Semana | 1-7 ou SUN-SAT |
| 7 | Ano (opcional) | 1970-2099 |
Essa mudança posicional é a fonte mais comum de erros entre dialetos. Uma expressão padrão como 0 9 * * MON (toda segunda às 09:00) se torna 0 0 9 ? * MON * em Quartz. Se você colar a versão padrão em um parser Quartz, 0 é lido como segundos, 9 como horas, e * como dia do mês, o que produz um agendamento completamente diferente.
Tokens Exclusivos do Quartz: ?, L, W e #
Além dos campos extras, o Quartz introduz quatro caracteres especiais que não existem no cron padrão. Esses tokens permitem padrões de agendamento que são impossíveis de expressar em um crontab de 5 campos.
O token ? (sem valor específico) é obrigatório no campo dia do mês ou dia da semana. O Quartz não permite que ambos os campos usem valores concretos simultaneamente. O cron padrão não tem tal restrição, então certas expressões padrão precisam ser reestruturadas para o Quartz.
O token L (último) seleciona o último dia de um mês ou o último dia da semana específico. Por exemplo, L em dia do mês significa o último dia (28-31 dependendo do mês), e 5L em dia da semana significa a última quinta-feira.
O token W (dia útil) seleciona o dia útil mais próximo de um determinado dia do mês. 15W significa o dia útil mais próximo do dia 15. Se o dia 15 for sábado, o job dispara na sexta-feira dia 14. Isso é valioso para agendamento em dias úteis.
O token # (enésima ocorrência) seleciona uma ocorrência específica de dia da semana dentro de um mês. 6#3 significa a terceira sexta-feira. O cron padrão não oferece forma nativa de expressar esse padrão.
Interpretando Agendamentos Reais: Exemplos Lado a Lado
Ver os dois dialetos em paralelo torna as diferenças concretas. Aqui estão requisitos comuns de agendamento expressos em ambos os formatos:
| Intenção | Cron Padrão | Cron Quartz | Diferença Principal |
|---|---|---|---|
| Todo dia à meia-noite | 0 0 * * * | 0 0 0 * * ? * | Prefixo de segundos; ? em dia da semana |
| Dias úteis às 09:30 | 30 9 * * 1-5 | 0 30 9 ? * MON-FRI * | Prefixo de segundos; ? em dia do mês; dias nomeados |
| Primeiro de cada mês às 06:00 | 0 6 1 * * | 0 0 6 1 * ? * | Prefixo de segundos; ? substitui curinga em dia da semana |
| A cada 15 minutos em horário comercial | */15 9-17 * * 1-5 | 0 0/15 9-17 ? * MON-FRI * | Campo de segundos; diferenças de sintaxe de passo; ? obrigatório |
| Último dia de cada mês ao meio-dia | Não suportado nativamente | 0 0 12 L * ? * | Token L exclusivo do Quartz |
A última linha destaca uma lacuna de capacidade. O cron padrão não pode expressar nativamente "último dia do mês." O Quartz resolve com um único token L. Essa vantagem de padrão é por que muitas plataformas corporativas adotam o dialeto Quartz apesar da complexidade adicionada.
Casos Extremos e Armadilhas Comuns
Diferenças de dialeto criam casos extremos sutis que passam em verificações básicas de sintaxe mas causam problemas em tempo de execução:
Incompatibilidade de numeração de dia da semana. O cron padrão usa 0-7 onde tanto 0 quanto 7 representam domingo. O Quartz usa 1-7 onde 1 é domingo e 7 é sábado. A expressão * * * * 5 (sexta no cron padrão) se torna 0 * * ? * 6 * no Quartz. Errar isso desloca seu job em um dia.
? ausente causa rejeição. O Quartz exige ? em exatamente um dos dois campos de dia. Usar * em ambos é inválido no Quartz, embora perfeitamente válido no cron padrão.
Ambiguidade de campo de ano. Com seis tokens, alguns parsers Quartz tratam o sexto como dia da semana enquanto outros o interpretam como ano. O Cronwise suporta modos de parsing explícitos standard5, withSeconds6 e quartz7 para eliminar essa ambiguidade.
Mudanças de fuso horário na migração de dialeto. Mudar o dialeto cron frequentemente significa mudar a plataforma do agendador, que pode ter um fuso horário padrão diferente. Um agendamento que rodava corretamente em um crontab configurado em UTC pode disparar no horário errado em um agendador Quartz usando o fuso da JVM. Para mais sobre esse risco, leia Fusos Horários no Cron Explicados para Equipes Globais.
Escolhendo o Dialeto Certo
A decisão de dialeto é guiada pela sua plataforma, não por preferência pessoal. Escolher o formato errado não causa apenas erros de parsing; pode produzir agendamentos silenciosamente errados que parecem válidos mas disparam nos horários errados.
Use cron padrão de 5 campos quando:
- Seu agendador é um daemon cron Unix/Linux, timer systemd ou serviço cron em nuvem que aceita sintaxe de 5 campos.
- Você não precisa de precisão sub-minuto ou tokens avançados de seleção de dia.
- Sua equipe trabalha primariamente em contexto shell ou DevOps onde o cron padrão é o dialeto comum.
Use cron Quartz quando:
- Seu agendador é Quartz Scheduler, Spring Boot ou outro framework baseado em JVM.
- Você precisa de granularidade em nível de segundo ou tokens como
L,We#para lógica de último dia, dia útil mais próximo ou enésimo dia da semana.
Se você não tem certeza de qual dialeto sua plataforma espera, verifique a documentação do agendador quanto à contagem de campos. Cinco campos significa padrão. Seis ou sete campos (começando com segundos) significa Quartz. O Cronwise identifica o dialeto automaticamente quando você cola uma expressão, mas saber o formato esperado previne confusão na origem.
Aplique no Fluxo do Cronwise
O Cronwise fornece ferramentas dedicadas para ambos os dialetos para que você nunca precise adivinhar ou converter mentalmente entre formatos. Aqui está o fluxo de verificação recomendado antes de implantar qualquer agendamento cron:
Checklist de Verificação
| Verificação | Por que Importa | Critério de Aprovação |
|---|---|---|
| Confirmar dialeto | Parser errado produz resultados errados | Contagem de campos corresponde ao seu agendador (5 vs 6/7) |
| Validar expressão | Captura erros de sintaxe e tokens mal posicionados | Sem erros ou avisos na validação do Cronwise |
| Ler explicação em linguagem simples | Revela incompatibilidade de intenção antes da implantação | Explicação corresponde ao seu objetivo de agendamento |
| Revisar pré-visualização dos próximos horários | Timestamps concretos expõem casos extremos | Próximos 10 horários caem nas janelas esperadas |
| Verificar fuso horário | Fuso do agendador pode diferir do seu horário local | Fuso da pré-visualização corresponde ao agendador de produção |
| Salvar e documentar | Reutilização e trilha de auditoria para colaboração da equipe | Expressão salva com nota descritiva |
Comece com o Explicador Quartz para decodificar uma expressão existente, ou use o Gerador Quartz para construir uma nova visualmente. Para cron padrão, o explicador da home e o gerador seguem o mesmo fluxo com sintaxe de 5 campos.
Resumo e Próximos Passos
As diferenças centrais entre Quartz e cron padrão se resumem a três áreas: contagem de campos (5 vs 6/7), tokens especiais (?, L, W, #) e numeração de dia da semana (0-7 vs 1-7). Toda outra distinção flui dessas divergências estruturais. Saber qual dialeto seu agendador espera e validar contra o parser correto elimina a classe mais comum de erros de agendamento.
Antes de implantar qualquer agendamento, passe pelo checklist de verificação acima. Confirme o dialeto, valide a expressão, leia a explicação em linguagem simples, revise os timestamps dos próximos horários no fuso de produção e salve o resultado com nota descritiva para sua equipe.
Para exploração mais profunda, leia nosso guia sobre Caracteres Especiais do Quartz para dominar a sintaxe de L, W e #. Se comportamento de fuso horário é uma preocupação, Fusos Horários no Cron Explicados para Equipes Globais cobre offsets UTC, casos extremos de horário de verão e estratégias de agendamento com consciência de fuso. Navegue por todos os artigos sobre cron para continuar aprendendo.