PK Systems PK Systems
Ferramentas para devs

Gerador e Explicador de Cron

Monte expressões cron campo a campo, ou cole uma existente para receber a explicação em português e os próximos cinco horários de execução.

Gerador e Explicador de Cron

Expressão cron

* * * * *

Ajuste qualquer campo acima para ver a expressão atualizar.

O que é uma expressão cron?

Uma expressão cron é um agendamento de cinco campos usado por agendadores Unix, sistemas de CI, CronJob do Kubernetes, AWS EventBridge, GitHub Actions e a maioria dos executores modernos de tarefa. Cada campo controla uma unidade de tempo — minuto, hora, dia do mês, mês e dia da semana — e aceita quatro abreviações: * (qualquer), uma lista separada por vírgula (0,15,30,45), um intervalo (1-5) e um passo (*/10). Combine-as e você descreve quase qualquer agenda recorrente sem precisar escrever um calendário à mão.

Como usar este gerador

Escolha um preset para um ponto de partida instantâneo, ou monte a expressão campo por campo. Cada campo tem quatro modos: Todos emite *; Lista específica recebe valores separados por vírgula; Intervalo recebe um par início–fim; Passo recebe um intervalo (*/N) com offset opcional. A expressão e a descrição em português atualizam ao vivo. Para o caminho inverso, cole uma string cron na caixa de parsing — a ferramenta decodifica para forma legível e mostra os próximos cinco horários no seu fuso local.

Referência dos campos

Minuto: 0–59. Hora: 0–23. Dia do mês: 1–31. Mês: 1–12 (janeiro = 1). Dia da semana: 0–6 com domingo = 0 no cron Unix clássico — 7 também é aceito como domingo na maioria dos parsers modernos. Quando dia do mês e dia da semana estão ambos definidos com valores diferentes de *, o cron clássico dispara em QUALQUER condição (um OR lógico), o que surpreende muita gente. Escolha um ou outro para comportamento previsível.

Perguntas frequentes

Funciona com Quartz / Spring cron?
Não — este gerador emite cron Unix clássico de 5 campos. Quartz e Spring usam uma variante de 6 ou 7 campos com um campo de segundos no início e um campo opcional de ano no fim. A estrutura é parecida, então normalmente dá pra colar essa saída e prefixar 0 para virar Quartz, mas tokens especiais como L (último) e W (dia útil) são exclusivos do Quartz e não aparecem aqui.
Como o explicador calcula as próximas execuções?
Quando você clica em Explicar, a ferramenta percorre a expressão e mostra os próximos cinco horários em que ela vai disparar, renderizados no fuso local do seu navegador. Todo o cálculo é local — suas strings cron nunca saem da página.
E quanto a fusos horários?
O gerador e a prévia das próximas execuções tratam a expressão como se rodasse no fuso local do seu navegador. Agendadores em produção variam: Linux crond usa o fuso do sistema, AWS EventBridge usa UTC por padrão, GitHub Actions usa UTC, Kubernetes usa o fuso do cluster. Sempre confirme o fuso do seu runner antes de fazer deploy.
Como expresso "último dia do mês"?
O cron Unix clássico não tem um token nativo de "último dia", então a aproximação portátil mais próxima é 59 23 28-31 * *, que dispara todo dia do 28 em diante às 23:59. O próprio job deve checar se date -d 'tomorrow' +%-d = 1 (ou o equivalente na sua linguagem) e abortar se não for fim de mês. Quartz cron tem L para isso — mas Quartz não roda em cron Linux puro.
Posso rodar a cada 90 minutos?
Não com uma única expressão cron — passos de cron resetam a cada hora, então */90 não funciona. A solução mais próxima é duas expressões: 0 0,3,6,9,12,15,18,21 * * * e 30 1,4,7,10,13,16,19,22 * * *, que juntas disparam a cada 90 minutos. Mais simples ainda: agende a cada 30 minutos e dê exit 0 no script quando não for o slot certo.
Por que meu job dispara duas vezes na mudança de horário de verão?
Quando o relógio adianta, jobs agendados na hora pulada normalmente são ignorados. Quando atrasa, jobs na hora repetida rodam duas vezes. Para evitar, rode o cron em UTC (cron.timezone = 'UTC' ou TZ=UTC no crontab) e converta para hora local dentro do job — UTC não tem horário de verão.