ToolActToolAct

Gerador de Expressão Cron

Gerador e analisador visual para expressões de agendamento Cron

Cron 表达式
* * * ? * *
每秒钟执行
常用
字段设置
秒 (0-59)
分 (0-59)
时 (0-23)
日 (1-31)
月 (1-12)
周 (0-6)
最近 5 次执行时间
12026-07-04 00:00:00
22026-07-04 00:01:00
32026-07-04 00:02:00
42026-07-04 00:03:00
52026-07-04 00:04:00

O que é uma Expressão Cron?

Uma expressão Cron descreve horários recorrentes para tarefas agendadas. Dependendo do agendador, ela pode ter cinco, seis ou sete campos para minuto, hora, dia do mês, mês, dia da semana, segundos opcionais e ano opcional. Símbolos como asterisco, vírgula, intervalos, passos, ponto de interrogação e marcadores especiais permitem regras como “a cada 5 minutos”, “dias úteis às 9” ou “último dia do mês”. A ferramenta ajuda a ler, validar e prever próximas execuções para não depender de memória. O contexto importa: Linux cron, Quartz, schedulers em nuvem e frameworks diferem em campos, fuso horário e sintaxe.

Como Usar

Como usar

  1. Selecione o modo gerar ou analisar
  2. Defina os campos de tempo (second, minute, hour, day, month, weekday) pelos menus suspensos
  3. Clique nas predefinições para preencher expressões comuns
  4. O modo gerar mostra a expressão e os próximos 5 horários de execução
  5. O modo analisar valida expressões existentes e mostra os horários de execução

Símbolos de Sintaxe

  • * — Todos os valores possíveis
  • , — Lista vários valores (ex.: 1,3,5)
  • - — Intervalo (ex.: 1-5)
  • / — Intervalo de passo (ex.: */5 significa a cada 5)
  • ? — Nenhum valor específico (para day ou weekday)
  • L — Último dia do mês ou da semana
  • W — Dia útil mais próximo
  • # — Enésimo dia da semana (ex.: 2#3 = 3ª terça-feira)

Notas de desenvolvimento

  • Use o resultado como referência rápida e teste-o no contexto real de código, build ou API.
  • Considere versões, dialetos, variáveis de ambiente e convenções do projeto.

Notas Importantes

  • Os campos day e weekday não podem ter ambos valores; um deles deve usar ?
  • Cada campo tem intervalos válidos: minute 0-59, hour 0-23
  • A ordem dos campos é fixa: sec min hour day month weekday year
  • O dia da semana não diferencia maiúsculas de minúsculas; MON e mon são equivalentes

Casos de uso

Montar agendamentos estilo Quartz sem memorizar cada campoUse os controles visuais de campos para montar uma expressão de 6 campos com segundos, minutos, horas, dia, mês e dia da semana, incluindo intervalos, passos, último dia, dia útil e padrões de enésimo dia da semana. O construtor de expressões é totalmente client-side, então um rascunho de agendamento pode ser verificado contra um arquivo de configuração do projeto ou um JSON de tarefa agendada antes de ser commitado e enviado.
Analisar uma expressão cron existente antes de implantá-laCole uma expressão de 5 ou 6 campos para preencher os controles e verificar se o agendamento está usando segundos, dia do mês, dia da semana ou ? da forma esperada. O resultado analisado mostra uma descrição em linguagem natural e os próximos horários de execução, o que é a maneira mais rápida de detectar um agendamento que dispara à meia-noite quando a tarefa deveria rodar durante o horário comercial.
Revisar os próximos horários de execução para sanidadeVerifique a descrição gerada em linguagem natural e os próximos cinco horários de execução antes de usar a expressão para tarefas, relatórios, backups, lembretes ou tarefas de servidor que são difíceis de reagendar após a implantação. Isso captura erros de um dia na escolha do dia da semana e comportamentos inesperados no campo de segundos antecipadamente. Um agendamento fixado em 0 0 0 29 2 ? para 29 de fevereiro silenciosamente pulará todo ano comum, então a visualização analisada torna essa lacuna visível antes de conectar a tarefa a um fluxo de folha de pagamento ou fechamento em lote.
Atentar para a diferença entre sintaxe Linux cron e QuartzUma expressão de 5 campos roda no cron Linux e em daemons Unix; uma expressão de 6 campos com segundos roda no Quartz, Spring e na maioria dos schedulers em nuvem. Confirme o sistema de destino antes de salvar, porque os mesmos dígitos significam agendamentos diferentes. O Quartz também aceita atalhos como @hourly, @daily, @midnight, @weekly, @monthly, @yearly e @reboot, que se reduzem a expressões fixas de cinco ou seis campos e são convenientes na anotação @Scheduled do Spring, mas rejeitados pelo crond clássico.
Verificar o tratamento de fuso horário antes de implantar a tarefaInspecione se o scheduler interpreta a expressão cron no horário do servidor, UTC ou em uma zona nomeada como America/New_York, pois uma tarefa escrita no horário da sede pode disparar com horas de atraso em um worker implantado globalmente.

Princípio técnico

Uma expressão cron codifica zero ou mais restrições de correspondência de tempo em campos em uma ordem fixa. O cron clássico Vixie/BSD (usado pelo crond do Linux) utiliza 5 campos: minuto (0-59), hora (0-23), dia do mês (1-31), mês (1-12 ou JAN-DEC) e dia da semana (0-6 ou SUN-SAT, com domingo = 0 por convenção). O agendador Quartz, popularizado pelo Spring e pela biblioteca Egistix, adiciona um campo de segundos no início para 6 campos e um campo de ano opcional no final para 7. Cada campo pode conter um valor literal, uma lista (1,3,5), um intervalo (1-5), um passo (0/15 significando a cada 15 a partir de 0) ou o curinga * que corresponde a todos os valores. O ponto de interrogação ? é um marcador exclusivo do Quartz que significa "nenhum valor específico" e DEVE aparecer em exatamente uma das posições dia do mês ou dia da semana quando a outra possui uma restrição. O cálculo dos próximos N horários de execução utiliza um algoritmo guloso de busca para frente: parte do instante de referência (geralmente agora), incrementa o campo de nível mais baixo que não corresponde à restrição, redefine todos os campos inferiores para seus mínimos e faz cascata para campos superiores quando um campo transborda (por exemplo, minutos passando de 59, horas passando de 23). Este é o método iterativo Donovan/Spoonhour e executa em O(K x F), onde K é o número de candidatos (geralmente 5) e F é a contagem de campos. Nomes de dias da semana (MON, FRI, etc.) são convertidos para minúsculas e comparados, e abreviações de nomes de meses também são aceitas. O caractere especial L no Quartz resolve para a última ocorrência de um dia da semana no mês (por exemplo, 0 0 0 ? * 5L é a última sexta-feira), calculado contando a partir do último dia do mês para encontrar o dia da semana solicitado. O caractere W encontra o dia útil mais próximo (segunda a sexta) de um determinado dia do mês, avançando para o mês adjacente se necessário. O tratamento de fuso horário é o erro de configuração mais comum: a expressão em si não carrega metadados de fuso horário, então a mesma 0 0 9 * * ? dispara em diferentes deslocamentos UTC em servidores na America/New_York vs. Asia/Tokyo vs. UTC. Atalhos como @daily (0 0 0 * * ?), @hourly (0 0 * * * ?), @reboot (executa uma vez na inicialização do daemon, não é uma expressão de tempo) e @weekly (0 0 0 ? * 1) são expandidos para sua forma equivalente de 6 campos antes da análise. Um erro comum é a conjunção dia do mês + dia da semana: no cron clássico a tarefa é executada quando qualquer um corresponde (lógica OR), enquanto alguns dialetos mais recentes mudam para lógica AND. A expressão 0 0 0 15 * 5 significa "à meia-noite do dia 15 E em toda sexta-feira" no cron Vixie, não "à meia-noite do dia 15 OU na sexta-feira" como muitos iniciantes supõem. O problema Y2038 não afeta o cron diretamente (ele usa time_t), mas qualquer dispositivo embarcado executando um crond Unix de 32 bits soverá overflow do inteiro com sinal de 32 bits de time_t em 2038-01-19T03:14:07Z.

  • Clássico de 5 campos: min hora dom mes dow; Quartz adiciona sec (6 campos) e opcionalmente year (7 campos).
  • ? deve ocupar uma das posições dom/dow quando a outra tem valor; * corresponde a todos os valores naquele campo.
  • Dia do mês + dia da semana é OR no cron Vixie, AND em alguns agendadores mais recentes - verifique antes de implantar.
  • L resolve para o último dia da semana do mês: ex. 0 0 0 ? * 5L = última sexta-feira, calculado a partir do comprimento do mês.
  • W encontra o dia útil mais próximo (segunda a sexta) de uma data específica; pode cruzar para o mês adjacente.
  • A expressão cron não carrega metadados de fuso horário: a mesma expressão dispara no horário local do servidor, UTC ou em uma zona nomeada dependendo do agendador.
  • Y2038: time_t de 32 bits sofre overflow em 2038-01-19 03:14:07 UTC; crond em sistemas embarcados legados serão afetados.
  • Atalhos @hourly/@daily/@midnight/@weekly/@monthly/@yearly/@reboot se expandem para expressões equivalentes de 5 ou 6 campos.
  • O operador de passo / conta a partir do valor mais à esquerda: 2/3 em hora dispara em 2, 5, 8, 11, 14, 17, 20, 23.
  • Busca gulosa para frente em O(KxF) com iteração de cinco candidatos para calcular os próximos N horários de execução a partir de um instante de referência.

Exemplos

Todos os dias à meia-noite (backup diário)

Expression : 0 0 * * *
Means      : Às 00:00 todos os dias
Next runs  : 2026-06-11 00:00, 2026-06-12 00:00, 2026-06-13 00:00
Use case   : Backup de banco de dados, geração de relatório diário

A cada 15 minutos (health check)

Expression : */15 * * * *
Means      : Nos minutos 0, 15, 30, 45 de cada hora
Next runs  : 14:00, 14:15, 14:30, 14:45, 15:00
Use case   : Health check de API, polling de fila, jobs de sincronização

Dias úteis às 9:00 (notificador em horário comercial)

Expression : 0 9 * * 1-5
Means      : 09:00 de segunda a sexta
Next runs  : Seg 09:00, Ter 09:00, Qua 09:00, Qui 09:00, Sex 09:00
Use case   : Lembrete de stand-up, resumo diário no Slack

Primeiro dia de cada mês às 03:30 (faturamento mensal)

Expression : 30 3 1 * *
Means      : 03:30 no dia 1º de cada mês
Next runs  : 1 Jul 03:30, 1 Ago 03:30, 1 Set 03:30
Use case   : Geração de fatura mensal, rotação de logs, arquivamento

Todo domingo à meia-noite (limpeza semanal)

Expression : 0 0 * * 0
Means      : 00:00 todo domingo (0 = domingo no cron do Linux)
Next runs  : Dom 00:00, Dom 00:00, Dom 00:00
Use case   : E-mail de relatório semanal, expurgo de cache, retreinamento

Quartz com segundos - a cada 30 segundos

Expression : */30 * * * * ?
Means      : A cada 30 segundos (sintaxe Quartz de 6 campos)
Next runs  : 14:00:00, 14:00:30, 14:01:00, 14:01:30
Note       : Day-of-week é ?, porque day-of-month é *. Use Quartz, não cron do Linux, para esse formato.

Perguntas frequentes

Quais formatos de cron são suportados?

Cron padrão de 5 campos (minute hour dayOfMonth month dayOfWeek), 6 campos com segundos (usado por Quartz, Spring e muitos agendadores em nuvem) e 7 campos com ano opcional. A página deixa você escolher o formato e explica cada campo enquanto monta a expressão.

Por que dayOfMonth e dayOfWeek são campos separados?

O cron padrão trata os dois como OU: 'primeiro dia do mês OU toda segunda-feira' dispara em qualquer das condições. Para fazer um E entre eles, normalmente é preciso uma sintaxe não padrão com ? (Quartz) ou um workaround. A página mostra os próximos horários de disparo para que você verifique sua intenção visualmente.

O agendamento vai realmente rodar no meu sistema?

Não — esta página gera e valida a expressão, mas o job roda no seu agendador (cron do Linux, GitHub Actions, CronJob do Kubernetes, AWS EventBridge, Quartz, etc.). Diferentes agendadores têm dialetos de cron ligeiramente diferentes; escolha o formato certo para seu destino.

Qual fuso horário o agendamento usa?

O cron Unix padrão usa o fuso horário local do sistema. Os agendadores em nuvem variam — AWS EventBridge usa UTC por padrão, GitHub Actions usa UTC por padrão, CronJob do Kubernetes usa o fuso horário do servidor da API. Leia a documentação do seu agendador e lembre que transições de horário de verão podem disparar jobs em horários inesperados.

Como expresso 'a cada 30 minutos'?

*/30 * * * * (minuto = 0,30; toda hora, dia, mês e dia da semana). Para 'a cada 15 minutos somente em horário comercial': */15 9-17 * * 1-5 (também restringe a 9-17h de seg-sex). A página mostra os próximos 5-10 horários de disparo para confirmar.

É seguro usar isso em agendamentos reais de produção?

A página só gera a expressão; quem roda o job é seu agendador. Teste a expressão com uma execução de exemplo primeiro (a maioria dos agendadores tem opção de 'execução manual') e evite agendar jobs à meia-noite (00:00), horário em que muitos jobs de sistema colidem e causam picos.

Algo é enviado para algum servidor?

Não. A expressão é interpretada e os próximos horários de disparo são calculados no seu navegador usando uma biblioteca de cron em JavaScript.