Pular para o conteúdo
Aback Tools Logo

Resolvedor de Cron: Entendendo Expressões Cron

Como ler, escrever e validar expressões cron: sintaxe campo a campo, caracteres especiais, padrões de agendamento comuns, diferenças entre plataformas, armadilhas frequentes e ferramentas gratuitas para resolver e simular agendamentos.

DH
Tutorials & How-Tos12 min de leitura2,700 palavras

Expressões cron parecem crípticas à primeira vista - cinco campos separados por espaços repletos de asteriscos, números, barras e vírgulas. Mas há uma lógica consistente em cada campo e, uma vez que você a entenda, ler e escrever agendamentos cron se torna simples. Este guia decompõe cada parte da sintaxe cron, explica os caracteres especiais, mostra os padrões de agendamento mais comuns e apresenta as ferramentas que resolvem, validam e simulam expressões cron antes de você implantá-las.

5Campos cron padrãominuto, hora, dia do mês, mês, dia da semana
15+Predefinições de agendamento integradasno Crontab Expression Builder
12moHorizonte de simulaçãono Interactive Cron Scheduler

O que é uma expressão cron?

Uma expressão cron é uma cadeia de cinco (ou às vezes seis) campos separados por espaços que define um agendamento recorrente para tarefas automatizadas. O formato foi inventado com o daemon cron do Unix no início dos anos 1970 e permaneceu essencialmente inalterado desde então. Hoje ele é usado em arquivos crontab do Linux, pipelines de CI/CD como GitHub Actions e GitLab CI, agendadores na nuvem como AWS EventBridge e Google Cloud Scheduler, orquestradores de contêineres como Kubernetes CronJob e frameworks de aplicação como Spring e Quartz.

A anatomia de uma expressão cron

O formato padrão de cinco campos é:

formato de expressão cron
text
┌----------- minuto        (0-59)
│ ┌--------- hora          (0-23)
│ │ ┌------- dia do mês  (1-31)
│ │ │ ┌----- mês         (1-12)
│ │ │ │ ┌--- dia da semana   (0-7, domingo = 0 ou 7)
│ │ │ │ │
* * * * *   comando a executar

Os campos são lidos da esquerda para a direita: minuto, hora, dia do mês, mês, dia da semana. A expressão "0 9 * * 1-5" dispara às 09:00 em todos os dias úteis. Cada campo pode conter um valor único, uma lista separada por vírgulas, um intervalo, um passo, um curinga ou uma combinação. Entender esses operadores é toda a habilidade de ler cron.

Note

Algumas plataformas usam um formato de 6 campos que adiciona um campo de segundos na posição 0 (antes dos minutos). O Spring Scheduler e o Quartz usam esse formato. O AWS EventBridge e a maioria dos daemons cron do Unix usam 5 campos. Verifique sempre qual formato a sua plataforma de destino espera - uma expressão escrita para uma pode produzir silenciosamente um agendamento errado em outra.

Sintaxe da expressão cron campo a campo

Cada campo tem um intervalo definido de valores inteiros válidos. Valores fora do intervalo válido produzem um erro ou uma configuração incorreta silenciosa, dependendo da implementação do cron. Entender o intervalo válido de cada campo é a base para ler qualquer expressão cron.

Intervalos válidos dos campos

  • Minuto - de 0 a 59. O valor 0 é o início da hora; o valor 59 é um minuto antes da próxima hora.
  • Hora - de 0 a 23. Usa formato de 24 horas: 0 é meia-noite, 12 é meio-dia, 23 é 11 PM.
  • Dia do mês - de 1 a 31. Os dias são indexados a partir de 1. Alguns meses têm menos dias - fevereiro tem 28 ou 29, e abril/junho/setembro/novembro têm 30.
  • Mês - de 1 a 12. Janeiro é 1, dezembro é 12. Algumas implementações também aceitam abreviações de três letras: JAN, FEB, MAR, etc.
  • Dia da semana - de 0 a 7. Tanto 0 quanto 7 representam domingo. Segunda é 1, sábado é 6. Algumas implementações suportam MON, TUE, WED, THU, FRI, SAT, SUN.

Como os campos interagem

Os cinco campos são avaliados juntos como um E lógico - a tarefa é executada quando todos os campos sem curinga coincidem simultaneamente. "0 9 15 * *" dispara exatamente às 09:00 no dia 15 de cada mês. A exceção crítica ocorre quando o dia do mês e o dia da semana são ambos valores sem curinga - nesse caso, a maioria dos daemons cron dispara se QUALQUER uma das condições for verdadeira (um OU lógico), não ambas. Essa é uma fonte notória de comportamentos inesperados.

Warning

O comportamento OU entre dia do mês e dia da semana é uma das armadilhas mais comuns do cron. "0 9 1 * 1" NÃO significa "a primeira segunda-feira do mês às 09:00" - significa "09:00 no dia 1 do mês, OU 09:00 em qualquer segunda-feira". Use um script ou um agendador gerenciado com lógica de calendário se você precisa da semântica real de "primeira segunda-feira do mês".

Caracteres especiais explicados

O poder do cron vem de seus caracteres especiais - os operadores que transformam valores fixos em padrões de agendamento flexíveis. Dominar esses seis operadores cobre praticamente todos os padrões de agendamento que você encontrará.

Os seis operadores principais

CaractereNomeExemploSignificado
*Curinga* no minutoTodos os valores válidos (0-59 para minutos)
,Lista1,15,30 no minutoNos minutos 1, 15 e 30
-Intervalo1-5 no dia da semanaDe segunda a sexta (dias 1 a 5)
/Passo*/15 no minutoA cada 15 minutos (0, 15, 30, 45)
?Não especificado? no dia do mêsNenhum valor específico (apenas Quartz/Spring)
@Macro@dailyApelidos abreviados (@daily = 0 0 * * *)

Combinando operadores

Os operadores podem ser combinados dentro de um mesmo campo. "0,30 9-17 * * 1-5" significa "nos minutos 0 e 30 de cada hora das 9h às 17h, de segunda a sexta". A sintaxe de passo também pode ser aplicada a um intervalo: "0-30/5" no campo de minuto significa a cada 5 minutos do minuto 0 ao minuto 30 (0, 5, 10, 15, 20, 25, 30). O Tradutor de Cron para Linguagem Natural decompõe qualquer combinação em linguagem clara com explicações campo a campo.

Tip

Ao ler uma expressão cron desconhecida, analise cada campo da esquerda para a direita e traduza-o de forma independente. Primeiro o campo de minuto, depois a hora, depois o dia do mês, depois o mês e por último o dia da semana. Leia cada campo sem asterisco como uma restrição: "somente quando minuto = X", "somente quando hora = Y", etc. O resultado lê-se como uma frase quando montado na ordem inversa, da direita para a esquerda.

Padrões de agendamento cron comuns

A maioria dos agendamentos cron do mundo real se encaixa em um punhado de padrões recorrentes. Conhecer esses padrões de vista permite ler a maioria dos crontabs de produção sem consulta.

  1. "* * * * *" - A cada minuto. O agendamento mais frequente possível. Usado para verificações de pulso e monitoramento.
  2. "*/5 * * * *" - A cada 5 minutos. Comum para tarefas de polling e aquecimento de cache.
  3. "0 * * * *" - A cada hora cheia. Padrão para processos em lote horários.
  4. "0 0 * * *" - Diariamente à meia-noite (UTC). O padrão para tarefas de limpeza diária.
  5. "0 9 * * 1-5" - 9h em todos os dias úteis. Agendamento padrão em horário comercial.
  6. "0 0 1 * *" - Meia-noite no dia 1 de cada mês. Execuções de faturamento mensal, geração de relatórios.
  7. "0 0 1 1 *" - Meia-noite em 1º de janeiro. Tarefas anuais - renovações de licenças, relatórios de fim de ano.
  8. "0 0 * * 0" - Meia-noite todo domingo. Janelas de manutenção semanais.

Construindo agendamentos personalizados a partir de padrões

A maioria dos agendamentos complexos são combinações desses padrões. "0 2 * * 6,0" significa "2h aos sábados e domingos" - a janela de manutenção do fim de semana. "*/10 8-18 * * 1-5" significa "a cada 10 minutos das 8h às 18h, somente dias úteis". Se você conhece o agendamento desejado em linguagem clara, o Crontab Expression Builder permite configurar cada campo visualmente e gera a expressão correta com uma confirmação legível e as próximas cinco execuções.

Crontab Expression Builder

Crie expressões cron visualmente com 15 predefinições, 5 modos de campo, descrição instantânea em linguagem clara e pré-visualização das próximas 5 execuções - grátis, sem cadastro.

Open tool

Como criar e validar expressões cron

Escrever uma expressão cron do zero e torcer para que esteja correta é arriscado. Um único campo transposto ou um operador mal compreendido pode fazer uma tarefa disparar em horários completamente errados - ou nunca disparar. Essas ferramentas eliminam esse risco.

1

Escreva ou selecione sua expressão

Abra o Crontab Expression Builder e digite sua expressão diretamente ou escolha entre as 15 predefinições integradas. Cada predefinição cobre um padrão de agendamento comum (a cada minuto, horário, diário, dias úteis, mensal) e pode ser ajustada com os controles visuais de campo sem tocar na expressão bruta.

2

Valide erros de sintaxe

Cole a expressão no Validador de Expressões Cron. Ele verifica cada campo contra seu intervalo válido, valida os limites dos intervalos (o início deve ser menor que o fim), confirma que os valores de passo não são zero e sinaliza macros não suportadas pelo crontab padrão de 5 campos. Cada erro vem com uma mensagem em nível de linha explicando o que o analisador esperava.

3

Traduza para linguagem clara

Passe a expressão validada pelo Tradutor de Cron para Linguagem Natural. A saída é uma frase completa em linguagem clara descrevendo o agendamento - "Às 2h30, nas segundas, quartas e sextas" - além de uma decomposição campo a campo. Se a descrição não corresponder à sua intenção, revise a expressão antes de implantar.

4

Simule os próximos 12 meses de execuções

Para tarefas agendadas em que o momento importa - execuções de faturamento, exportações de dados, janelas de manutenção - abra o Interactive Cron Scheduler e simule a expressão pelos próximos 12 meses. A visão de calendário mostra a densidade mensal de execuções e a linha do tempo mostra carimbos de data/hora exatos. Confirme que o agendamento dispara nas datas esperadas antes de mesclar a configuração em produção.

Validador de Expressões Cron

Valide sintaxe cron de 5 campos, intervalos, passos, valores de lista e macros com diagnósticos instantâneos por campo - local no navegador, grátis, sem cadastro.

Open tool

Cron em CI/CD e agendadores na nuvem

A sintaxe cron é usada muito além do crontab do Linux. As plataformas modernas de CI/CD e nuvem adotaram o mesmo formato de 5 campos, mas cada uma tem suas peculiaridades no tratamento de fuso horário, suporte a macros e restrições de intervalo mínimo.

Diferenças plataforma por plataforma

PlataformaCamposFuso horárioMacrosIntervalo mín.
Linux crontab5Local do sistema✓ Todas as 6A cada minuto
GitHub Actions5Somente UTC✗ NenhumaA cada 5 min (deriva forçada de 15 min)
GitLab CI5Somente UTC✓ ParcialA cada minuto
AWS EventBridge5 ou 6Somente UTC✗ NenhumaA cada minuto
Google Cloud Scheduler5 ou unixQualquer fuso IANA✓ AlgumasA cada minuto
Kubernetes CronJob5Fuso do cluster✗ NenhumaA cada minuto
Spring Scheduler6Padrão da JVM✓ SimA cada segundo

Agendamento cron no GitHub Actions

O GitHub Actions usa a sintaxe cron padrão de 5 campos, mas sempre executa em UTC. Se você quer uma tarefa às 9h no horário do Leste (UTC-5), escreve "0 14 * * *". O GitHub Actions também não suporta sintaxe de macros (@daily, @weekly), então use a expressão completa. Workflows agendados durante períodos de alta carga podem disparar com até 15 minutos de atraso - projete suas tarefas para tolerar essa deriva.


Convertendo cron para temporizadores systemd

Os sistemas Linux modernos usam cada vez mais temporizadores systemd em vez do crontab clássico. O formato OnCalendar do systemd usa uma sintaxe diferente, mas cobre os mesmos padrões. O Conversor de Cron para Temporizador Systemd converte qualquer expressão cron de 5 campos em sua configuração equivalente de unidade de temporizador systemd, incluindo um modelo completo de arquivos .timer e .service.

Armadilhas e casos extremos do cron

Até desenvolvedores experientes encontram falhas silenciosas com o cron. Estas são as armadilhas mais comuns - cada uma já custou a sistemas de produção indisponibilidade despercebida ou execuções duplicadas de tarefas.

Surpresas de fuso horário

O cron executa no fuso horário local do servidor por padrão. Se o seu servidor está em UTC mas o seu negócio está em Nova York (UTC-5), "0 9 * * *" dispara às 4h no horário local, não às 9h. Plataformas na nuvem como GitHub Actions e AWS EventBridge sempre executam em UTC, o que significa que toda a matemática de fuso horário recai sobre você. Confirme sempre o fuso horário antes de implantar um agendamento. O Interactive Cron Scheduler permite simular execuções com o deslocamento de fuso aplicado.

Casos extremos de fim de mês

Agendar uma tarefa no dia 29, 30 ou 31 do mês faz com que ela salte silenciosamente os meses que não têm essa data. "0 0 31 * *" nunca executa em abril, junho, setembro ou novembro. "0 0 29 2 *" executa em fevereiro somente em anos bissextos. Se você precisa de um agendamento de "último dia do mês", é preciso uma abordagem mais inteligente - ou executar diariamente com um script que verifica a data, ou usar um agendador na nuvem que suporte a sintaxe L (último) dia.

Transições de horário de verão

As transições do horário de verão podem fazer tarefas cron executarem duas vezes ou serem puladas. Quando os relógios adiantam, os horários dentro da hora pulada nunca ocorrem. Quando os relógios atrasam, os horários dentro da hora repetida ocorrem duas vezes. Tarefas agendadas em um fuso horário local durante a janela de transição são afetadas. A prática mais segura é executar servidores e agendadores em UTC, que nunca tem transições de horário de verão.

Warning

Nunca confie no cron para execução exata e crítica em tempo. Os daemons cron podem perder uma execução se o sistema estiver fora do ar, reiniciando, sob carga pesada ou se o relógio for ajustado. Para transações financeiras, um design de tarefa idempotente e uma fila de tarefas com tratamento de mensagens mortas são mais confiáveis do que o agendamento cron puro.

O problema do cada segundo

O cron padrão de 5 campos tem uma resolução mínima de um minuto. Se você precisa de uma tarefa a cada 10 segundos, o cron não é a ferramenta certa - use um temporizador do sistema, uma fila de tarefas com atrasos ou o campo de segundos disponível no Spring Scheduler e no Quartz. Tentar aproximar agendamentos sub-minuto com várias entradas de crontab é propenso a erros e cria condições de corrida quando as tarefas se sobrepõem.

Key takeaways

  • Uma expressão cron tem cinco campos: minuto (0-59), hora (0-23), dia do mês (1-31), mês (1-12), dia da semana (0-7).
  • Os seis caracteres especiais são * (curinga), , (lista), - (intervalo), / (passo), ? (não especificado, apenas Quartz) e @ (macros como @daily).
  • Quando o dia do mês e o dia da semana são ambos sem curinga, a maioria dos daemons cron dispara se QUALQUER um coincidir - uma fonte comum de execuções duplas inesperadas.
  • Use o Crontab Expression Builder para construir visualmente, o Validador de Expressões Cron para verificar a sintaxe e o Interactive Cron Scheduler para simular 12 meses de execuções.
  • O GitHub Actions usa cron de 5 campos somente UTC sem suporte a macros; AWS EventBridge e Google Cloud Scheduler também usam UTC; o crontab do Linux usa o fuso horário local do sistema.
  • Não agende no dia 29, 30 ou 31 se precisar que a tarefa execute todo mês - esses dias não existem em todos os meses.
  • O cron padrão tem resolução mínima de um minuto; use temporizadores systemd, filas de tarefas ou Spring/Quartz para necessidades de agendamento sub-minuto.

Perguntas frequentes

A cron resolver is a tool that parses a cron expression and translates it into a human-readable schedule description and a list of the next scheduled run times. Given an expression like "0 9 * * 1-5", a resolver tells you "At 09:00 AM, Monday through Friday" and shows you the next five dates and times the job will fire. The Aback Tools Cron to Human-Readable Translator and Interactive Cron Scheduler both perform this resolution instantly in your browser without uploading anything to a server.

The five fields are minute (0-59), hour (0-23), day of month (1-31), month (1-12), and day of week (0-7, where both 0 and 7 represent Sunday). They run left to right in that order. The expression "30 8 * * 1" means "At 8:30 AM, every Monday." An asterisk (*) in any field means "every valid value for that field." Most standard crontab implementations use exactly these five fields; some extended formats (Spring Scheduler, Quartz) add a sixth seconds field at the start.

An asterisk (*) is the wildcard character in cron - it means "match every valid value for this field." In the minute field, * means every minute (0-59). In the hour field, * means every hour (0-23). In the day-of-week field, * means every day. So "* * * * *" runs every minute of every hour every day. It is the broadest possible value for any field. Use it when a field should not restrict the schedule rather than listing every value explicitly.

Range syntax specifies a span of consecutive values: "1-5" in the day-of-week field means Monday through Friday. Step syntax uses a forward slash to specify an interval: "*/15" in the minute field means every 15 minutes (0, 15, 30, 45). They can be combined: "0-30/10" means every 10 minutes from minute 0 to minute 30 (0, 10, 20, 30). Step syntax is commonly used to run jobs at regular intervals without listing every value explicitly.

Use the step syntax in the minute field: "*/5 * * * *". This expression fires at minutes 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, and 55 of every hour, every day. If you need to run every 5 minutes but only during business hours (9 AM to 5 PM, Monday to Friday), use "*/5 9-17 * * 1-5". Validate the expression in the Cron Expression Validator and preview the exact fire times in the Interactive Cron Scheduler before deploying.

Cron macros are shorthand aliases for common schedule expressions. The most widely supported are @reboot (run once at startup), @yearly or @annually ("0 0 1 1 *"), @monthly ("0 0 1 * *"), @weekly ("0 0 * * 0"), @daily or @midnight ("0 0 * * *"), and @hourly ("0 * * * *"). Support varies by scheduler - Linux crontab and most Unix cron daemons support all six; AWS EventBridge, Google Cloud Scheduler, and GitHub Actions do not support macro syntax. The Cron to Human-Readable Translator handles macros and expands them to their equivalent expressions.

The most common causes are timezone mismatch (cron runs in the server's local timezone, often UTC), off-by-one in day-of-week numbering (0 and 7 both mean Sunday on most systems, but not all), and the interaction between day-of-month and day-of-week fields (when both are non-wildcard, most cron implementations fire if EITHER condition is true, not both). Use the Interactive Cron Scheduler to simulate the exact fire times in UTC versus your expected timezone before concluding there is a bug.

Yes. GitHub Actions supports cron scheduling via the `schedule` trigger with a `cron:` key using standard 5-field cron syntax. GitHub Actions runs on UTC, so adjust your expression accordingly. Note that GitHub Actions does not support cron macros (@daily, @weekly, etc.) - use the full 5-field expression instead. Also, scheduled workflows may not run at exactly the specified time during periods of high load; expect up to 15 minutes of drift. The Crontab Expression Builder generates GitHub Actions-compatible expressions with next run time previews.

ShareXLinkedIn