Gerador Crontab e Construtor de Expressão Cron
Crie, valide e decodifique expressões cron no navegador. Pré-visualização ao vivo da próxima execução em horário local ou UTC. Sintaxe POSIX de 5 campos, presets, descrição em linguagem clara. Grátis, privado, sem cadastro.
Em linguagem clara
—
Próximas 5 execuções agendadas
O que é uma expressão cron?
Uma expressão cron é uma string de cinco campos que define um agendamento recorrente. Da esquerda para a direita, os campos são minuto (0-59), hora (0-23), dia do mês (1-31), mês (1-12) e dia da semana (0-6, onde 0 e 7 ambos significam domingo). Cada campo aceita um valor, uma lista (`1,3,5`), um intervalo (`1-5`), um curinga (`*` significando qualquer valor) ou um passo (`*/15` significando a cada 15). A combinação define exatamente quando o comando agendado vai rodar — `0 9 * * 1-5`, por exemplo, lê-se "no minuto 0, hora 9, qualquer dia do mês, qualquer mês, dia da semana de segunda a sexta" — em linguagem clara, "dias úteis às 9:00".
O cron surgiu no Unix Versão 7 em 1979 e a gramática de cinco campos permaneceu essencialmente inalterada por mais de quatro décadas — um testemunho de quão bem desenhada é a sintaxe original. Hoje, as expressões cron são usadas muito além do arquivo crontab do Unix: Kubernetes CronJobs, workflows do GitHub Actions, regras do AWS EventBridge, pipelines agendados do GitLab CI, Cron Triggers do Cloudflare Workers e plataformas serverless em todas as nuvens aceitam a mesma gramática de cinco campos. Aprender cron uma vez significa saber agendar jobs em qualquer contexto moderno de infraestrutura.
O padrão POSIX define cinco operadores: `*` (qualquer valor), `,` (lista de valores), `-` (intervalo), `/` (passo) e tokens nomeados para meses (JAN-DEC) e dias da semana (SUN-SAT). A maioria das implementações também expande cinco atalhos comuns: `@yearly` (`0 0 1 1 *`), `@monthly` (`0 0 1 * *`), `@weekly` (`0 0 * * 0`), `@daily` (`0 0 * * *`) e `@hourly` (`0 * * * *`). O Quartz Scheduler (uma biblioteca Java) estende isso com um campo de segundos opcional e operadores adicionais (`?`, `L`, `W`, `#`) — útil se você trabalha com Java/Spring, mas não é portável para cron padrão. Esta ferramenta segue o padrão POSIX de cinco campos porque é a variante dominante e a que seu servidor Linux, runner do GitHub Actions e cluster Kubernetes vão realmente entender.
Uma peculiaridade do cron POSIX merece atenção especial: quando tanto dia do mês quanto dia da semana estão restritos (nenhum é `*`), o agendamento dispara quando QUALQUER um bate — semântica de OU, não de E. Então `0 0 1 * 5` roda no dia 1º de todo mês E em toda sexta-feira, não apenas nas sextas que por acaso caem no dia 1. Essa é a pegadinha mais comum do cron; a pré-visualização da próxima execução nesta ferramenta deixa isso óbvio mostrando as datas reais em que o agendamento vai disparar. Verifique antes de fazer deploy.
Toda a interpretação e o cálculo da próxima execução acontecem inteiramente no seu navegador usando JavaScript — nenhuma expressão, agendamento ou outro dado é jamais enviado a um servidor. Esta ferramenta interpreta qualquer expressão cron POSIX padrão instantaneamente com uma descrição em linguagem clara e uma pré-visualização de cinco execuções, com total privacidade.
Expressões cron têm relação próxima com outras ferramentas para desenvolvedores. Cron jobs são comumente depurados conferindo timestamps Unix contra os horários de execução esperados, e agendamentos complexos costumam ser documentados como configuração JSON, que pode ser validada com nosso formatador JSON. Para um guia aprofundado cobrindo a semântica de OU, armadilhas de fuso horário e variantes comuns de cron com exemplos em Linux, Kubernetes e GitHub Actions, leia nossa referência de agendamento cron.
# Linux crontab entry — runs every 15 minutes
*/15 * * * * /usr/local/bin/poll-api.sh
# Kubernetes CronJob — weekdays at 9:00 AM UTC
apiVersion: batch/v1
kind: CronJob
metadata:
name: daily-report
spec:
schedule: "0 9 * * 1-5"
timeZone: "UTC"
jobTemplate:
spec:
template:
spec:
containers:
- name: report
image: report-runner:1.0
restartPolicy: OnFailure
# GitHub Actions workflow — hourly
on:
schedule:
- cron: '0 * * * *'
# AWS EventBridge — first of each month
ScheduleExpression: cron(0 0 1 * ? *)
# (Note: AWS uses the Quartz 6-field form with '?' for day-of-week) Principais recursos
Parser POSIX de 5 campos ao vivo
Parser estrito seguindo cron POSIX: minuto (0-59), hora (0-23), dia do mês (1-31), mês (1-12 ou JAN-DEC), dia da semana (0-6 ou SUN-SAT, com 7 também aceitando domingo). Todos os operadores padrão (`*` `,` `-` `/`) e macros (`@yearly` `@monthly` `@weekly` `@daily` `@hourly`) suportados.
Pré-visualização das próximas 5 execuções
Calcula os próximos cinco horários de execução agendada a partir do seu horário local atual. Alterne entre Local e UTC com um clique — a forma mais confiável de pegar surpresas de fuso horário antes de fazer deploy de um crontab em um servidor de outra região.
Descrição em linguagem clara
Toda expressão válida ganha uma explicação legível: "A cada 15 minutos", "Dias úteis às 9:00", "Às 02:30 no dia 1 do mês, em janeiro e julho". Torna o code review e a passagem para o time triviais — chega de adivinhar o que `*/5 9-17 * * 1-5` realmente faz.
Mensagens de erro no nível do campo
Expressões inválidas recebem feedback vermelho instantâneo com o campo problemático destacado e um erro específico: "Erro em minuto: valor fora do intervalo [0, 59]: "60"". Chega de falhas silenciosas de crontab descobertas três dias depois quando o relatório não rodou.
Chips de preset para agendamentos comuns
Onze presets de um clique cobrem os agendamentos que você realmente vai usar: a cada minuto, a cada 5/15 minutos, a cada hora, diário à meia-noite ou às 9h, dias úteis às 9h, semanal aos domingos/segundas, dia 1º de cada mês e anual. Toque, ajuste, faça deploy.
Entradas de construção por campo
Não precisa decorar a ordem dos cinco campos — cinco campos pequenos rotulados Minuto, Hora, Dia do mês, Mês e Dia da semana permitem editar uma posição de cada vez sem perder um valor ou trocar a ordem. A expressão completa no topo se reconstrói automaticamente.
Semântica POSIX de OU feita certo
Quando tanto dia do mês quanto dia da semana estão restritos, a regra do OU entra em ação — `0 0 1 * 5` roda em todo dia 1º E em toda sexta. A pré-visualização da próxima execução deixa isso visível antes do deploy; chega de páginas-surpresa no fim de semana.
Privacidade 100% no navegador
Suas expressões cron — que frequentemente revelam tempos de infraestrutura e padrões de agendamento interno — nunca saem do seu navegador. Nenhum dado é enviado a servidor algum, sem logs, sem analytics. Você pode verificar isso na aba Network do seu navegador. Segura para agendamentos de produção e sistemas internos.
Mensagens de erro cientes de Quartz
Se você colar uma expressão Quartz com `?` `L` `W` ou `#`, o parser explica "Operadores Quartz não suportados — use sintaxe POSIX" para você saber que precisa reescrever para cron em vez de depurar uma falha silenciosa. Agendamentos Quartz não rodam no cron do Linux.
Variantes de cron e agendadores
Vixie cron (padrão do Linux)
5 campos POSIXO padrão na maioria das distros Linux. POSIX estrito com extensão `CRON_TZ=` para fuso explícito. A semântica de OU entre dia do mês e dia da semana se aplica. Alvo principal desta ferramenta.
BSD cron
5 campos POSIXPadrão no macOS e na família BSD. Compatível com POSIX com pequenas diferenças de implementação em relação ao vixie cron; a maioria das expressões funciona de forma idêntica.
Timers do systemd (OnCalendar)
spec de calendário, não cronAlternativa ao cron em Linux baseado em systemd. Usa sintaxe `OnCalendar: 2026-*-* 09:00:00` — mais legível para agendamentos não recorrentes, mas não interopera com expressões cron.
Quartz Scheduler (Java/Spring)
6 ou 7 camposAdiciona campos de segundos (obrigatório) e ano (opcional), mais operadores `?`, `L`, `W`, `#`. Útil para apps Java, mas não portável para cron do Linux.
AWS EventBridge
6 campos estilo Quartz com `?`Exige que dia da semana ou dia do mês seja `?` (convenção Quartz) em vez de `*` quando apenas um está restrito. Expressões não migram diretamente para cron do Linux.
Kubernetes CronJob
5 campos POSIX + campo timeZoneAgendamento POSIX de 5 campos mais campo `spec.timeZone` (1.27+). Mais limpo do que confiar no fuso do host do kubelet. Expressões migram diretamente do cron do Linux.
GitHub Actions
5 campos POSIXSempre roda em UTC. Timing best-effort — pode ser pulado sob alta carga. Evite intervalos menores que 15 minutos. Expressões migram diretamente do cron do Linux.
Exemplos de expressão cron
A cada 15 minutos
*/15 * * * *
Operador de passo: `*/15` no campo de minuto significa "a cada 15 minutos começando no minuto 0" — então as execuções acontecem em :00, :15, :30, :45 de toda hora de todo dia. O intervalo mais comum para polling de APIs, atualização de caches e verificações de heartbeat.
Dias úteis às 9:00
0 9 * * 1-5
O intervalo `1-5` no campo de dia da semana significa segunda a sexta (1=Seg, 5=Sex). Roda exatamente às 09:00 — útil para relatórios em horário comercial, jobs batch que dependem de dados noturnos e lembretes de daily standup.
Dia 1º do mês à meia-noite
0 0 1 * *
Dia do mês `1`, todos os campos menores em zero. Comum para faturamento mensal, rotação de logs e reconciliação de fim de período. Dia do mês e dia da semana só ficam ambos restritos quando nenhum é `*` — aqui dia da semana é `*`, então só o dia do mês importa.
A cada 5 minutos das 9h às 17h, dias úteis
*/5 9-17 * * 1-5
Combina passo (`*/5`) com intervalo (`9-17`) em campos diferentes. Útil para monitoramento apenas em horário comercial ou para esvaziar filas. Total: 12 execuções/hora × 9 horas × 5 dias = 540 execuções por semana útil.
Trimestral: 1º de jan, abr, jul, out à meia-noite
0 0 1 JAN,APR,JUL,OCT *
Meses nomeados em uma lista separada por vírgula. Agendamentos trimestrais como fechamento financeiro, revisões de code-freeze ou auditorias de compliance. Você pode misturar nomes e números (`1,APR,7,10` é interpretado igual), mas mantenha um único estilo para legibilidade.
Pegadinha do OU POSIX: dia 1º do mês OU toda sexta
0 0 1 * 5
Quando AMBOS dia do mês (`1`) E dia da semana (`5`) estão restritos, o cron POSIX executa o job se QUALQUER um bater. Então isso dispara no dia 1º de todo mês E em toda sexta-feira — não apenas nas sextas que caem no dia 1. Essa é a pegadinha mais comum do cron; a pré-visualização da próxima execução deixa isso óbvio.
Todo dia às 02:30 (janela de baixo tráfego)
30 2 * * *
Valores específicos para hora e minuto, curingas no resto. A janela 02:00-04:00 UTC é a convenção de fato para jobs batch noturnos porque não sobrepõe o horário comercial de nenhuma região de negócios relevante. Combine com o toggle de fuso UTC para confirmar que a execução cai onde você espera.
Equivalente Macro: @daily
@daily
O atalho `@daily` (também `@midnight`) expande para `0 0 * * *` — todo dia à meia-noite. Outras macros: `@yearly` = `0 0 1 1 *`, `@monthly` = `0 0 1 * *`, `@weekly` = `0 0 * * 0`, `@hourly` = `0 * * * *`. As macros são concisas, mas a forma de cinco campos é mais portável entre agendadores (ex.: alguns suportam macros, outros não).
Como construir uma expressão cron
- 1
Digite ou cole uma expressão cron
Insira uma expressão cron de cinco campos no campo acima (ex.: `*/15 * * * *`). A ferramenta interpreta e valida conforme você digita — check verde para válida, erro vermelho com nome do campo para inválida. Macros como `@daily`, `@hourly` etc. também são aceitas.
- 2
Ou ajuste as entradas dos cinco campos
Não precisa decorar a ordem dos campos — edite Minuto, Hora, Dia do mês, Mês ou Dia da semana individualmente usando os campos rotulados. A expressão completa no topo atualiza automaticamente. Use `*` para curingas, `*/N` para passos, `a-b` para intervalos e `1,3,5` para listas.
- 3
Escolha um preset para começar
Toque em qualquer chip de preset (A cada 15 minutos, Dias úteis às 9h etc.) para carregar um agendamento comum e depois ajuste os campos para sua necessidade exata. Onze presets cobrem os padrões que você vai realmente usar em produção.
- 4
Verifique a pré-visualização da próxima execução
Olhe para as cinco datas e horas das próximas execuções — alterne entre Local e UTC para confirmar que o agendamento dispara quando você pretende. Essa é a forma mais confiável de pegar a pegadinha do OU entre dia do mês e dia da semana POSIX antes que ela morda você em produção.
- 5
Copie e cole no seu agendador
Clique em Copiar para pegar a expressão. Cole no seu crontab, timer do systemd, `cron:` do GitHub Actions, AWS EventBridge, `schedule` do Kubernetes CronJob ou em qualquer agendador compatível com cron. Não esqueça de verificar o fuso do agendador alvo — veja a seção Boas Práticas abaixo.
Erros comuns com cron
Armadilha do OU POSIX: ambos os campos de dia restritos
Quando AMBOS dia do mês e dia da semana estão restritos, o cron POSIX executa o job se QUALQUER um bater — não os dois. Então `0 0 1 * 5` dispara no dia 1º de todo mês E em toda sexta-feira, não apenas nas sextas-que-caem-no-dia-1. Use `*` em um dos dois campos de dia quando quiser uma única condição, ou escreva um script wrapper que faça a checagem de E.
# Pretendido: "primeira sexta-feira do mês" 0 0 1-7 * 5 # Na verdade: dispara nos dias 1-7 do mês OU em toda sexta — ambas as condições
# Use wrapper para semântica E verdadeira 0 0 * * 5 [ $(date +\%d) -le 7 ] && /seu-script # OU largue uma das condições e aceite o agendamento mais frouxo
Deriva de fuso entre dev e prod
Agendamentos cron em um servidor Linux usam o fuso do sistema, não o fuso local de quem escreveu. Um cron de 9:00 em um servidor configurado em UTC dispara às 4:00 no US East. Sempre desenhe agendamentos contra o fuso do servidor alvo — preferencialmente UTC — e fixe o fuso explicitamente com `CRON_TZ=...` no topo do crontab.
# Escrito por dev em US East, deployado em servidor UTC 0 9 * * * /seu-relatorio.sh # Dispara às 9h UTC = 4h US East — não era o que o dev queria
# Fixe o fuso, ou escreva em UTC explicitamente CRON_TZ=America/New_York 0 9 * * * /seu-relatorio.sh
Confusão do operador de passo: '*/15' vs '15'
`*/15` em minuto significa "a cada 15 minutos começando no 0" (então 0, 15, 30, 45). Só `15` significa "apenas no minuto 15" — uma execução por hora. Iniciantes frequentemente escrevem `15` achando que é a cada 15 minutos; a descrição em linguagem clara da ferramenta deixa o erro óbvio antes do deploy.
# Pretendido: a cada 15 minutos 15 * * * * # Na verdade: uma vez por hora, no minuto 15 (4 execuções/hora a menos do que pretendido)
# Correto */15 * * * * # A cada 15 minutos: minuto 0, 15, 30, 45 de toda hora
Expressão de seis campos em agendador POSIX
Quartz/Spring/node-cron suportam um campo de segundos opcional como primeira posição. Crontab do Linux, GitHub Actions, AWS EventBridge (na maior parte) e Kubernetes CronJob NÃO suportam — eles esperam cinco campos. Colar uma expressão de seis campos quebra silenciosamente o agendamento: seus segundos viram minutos, minutos viram horas etc.
# 6 campos Quartz copiados para crontab Linux 0 0 9 * * 1-5 # Linux lê: minuto=0, hora=0, dom=9, mês=*, dow=1-5 # = meia-noite nos dias 9 em meses que batem com dias úteis — caos
# POSIX 5 campos, descarte os segundos 0 9 * * 1-5 # = dias úteis às 9:00
Dia do mês fora do intervalo para o mês
Cron não valida dia do mês contra o mês real. `0 0 31 2 *` (31 de fevereiro) é interpretado normalmente mas nunca bate — fevereiro tem no máximo 29 dias. Iniciantes assumem que o parser vai pegar isso; ele não pega. A pré-visualização da próxima execução desta ferramenta mostra "Nenhuma execução próxima" quando uma expressão é estruturalmente válida mas logicamente impossível.
# 30 ou 31 de fevereiro — nunca roda 0 0 30 2 * 0 0 31 2 * # Interpreta mas nenhum agendamento jamais dispara
# Use o padrão 'último dia útil de fevereiro' via script 0 0 28-29 2 * [ $(date -d tomorrow +\%m) = 03 ] && /seu-script
Confundir sintaxe Quartz com POSIX
Documentação da AWS, tutoriais de Spring e muitas respostas do Stack Overflow mostram expressões cron Quartz com `?`, `L`, `W` ou `#`. Essas não funcionam no crontab do Linux. Se você copiar uma expressão de seis campos com `?` no slot de dia da semana, o parser do Linux vai rejeitar (ou pior, interpretar silenciosamente errado). Esta ferramenta pega operadores Quartz e explica a diferença.
# Quartz: 'última sexta do mês' — inválido em POSIX 0 0 ? * 6L *
# Abordagem POSIX com script wrapper para última sexta 0 0 25-31 * 5 /seu-script # Roda na sexta entre os dias 25-31 de qualquer mês
Casos de uso comuns
- Jobs de crontab Linux
- Construa e verifique entradas para `/etc/crontab`, `/etc/cron.d/*` ou arquivos `crontab -e` por usuário. Use a pré-visualização da próxima execução para confirmar que o agendamento cai no horário certo no fuso configurado do seu servidor antes de salvar.
- Agendamentos de Kubernetes CronJob
- Gere o campo `spec.schedule` para um Kubernetes CronJob. Kubernetes 1.27+ também suporta `spec.timeZone` — use o toggle UTC para desenhar seu agendamento em UTC e depois defina `timeZone` explicitamente para evitar o horário local do worker node.
- Workflows agendados do GitHub Actions
- Construa a entrada `cron:` sob `on.schedule`. GitHub Actions sempre roda em UTC — alterne a pré-visualização para UTC para confirmar seu agendamento. Evite intervalos menores que 15 minutos; o agendador do GitHub pula jobs de intervalo curto sob carga.
- Regras do AWS EventBridge
- Componha a expressão cron para uma regra agendada do EventBridge. Obs.: a AWS usa sintaxe estilo Quartz de seis campos com `?` para dia da semana — esta ferramenta emite POSIX de cinco campos, que você precisará converter prefixando segundos (`0`) e substituindo o `*` em um dos campos de dia por `?`.
- Pipelines agendados do GitLab CI
- Verifique a expressão cron para um pipeline CI agendado no GitLab. GitLab usa sintaxe POSIX de cinco campos — exatamente o que esta ferramenta emite — e um seletor de data na UI, mas a forma cron dá controle mais fino para intervalos não padrão.
- Cron Triggers do Cloudflare Workers
- Construa a entrada `[triggers.crons]` em `wrangler.toml`. Cloudflare usa sintaxe POSIX de cinco campos. O intervalo mínimo é um minuto; o worker roda em UTC. Use a pré-visualização para verificar que o trigger dispara dentro da janela esperada.
- Agendamentos do node-cron em Node.js
- Construa expressões para a biblioteca `node-cron`, que suporta tanto cinco campos POSIX quanto um campo de segundos opcional no início. Fique nos cinco campos a menos que você especificamente precise de precisão sub-minuto — expressões de seis campos não migram para o crontab do Linux.
- Code review e documentação
- Cole uma expressão cron de um PR ou runbook para ver instantaneamente o que ela faz — chega de adivinhar `30 7 * * 1-5` ou puxar um cartão de referência. A descrição em linguagem clara também é ótima para comentários inline e arquivos README.
Referência de sintaxe cron
- Ordem dos campos: M H D M W
- Minuto (0-59), Hora (0-23), Dia do mês (1-31), Mês (1-12), Dia da semana (0-6, 7 também = domingo). Mnemônico: "Meu Hipopótamo Dorme Mais Wee". O campo de dia da semana aceita tanto tokens numéricos (0-6) quanto nomeados (SUN-SAT, case-insensitive).
- Operadores
- `*` = qualquer valor; `,` = separador de lista (`1,3,5`); `-` = intervalo (`1-5`); `/` = passo (`*/15`, `5/10`); nomes: JAN-DEC para mês, SUN-SAT para dia da semana (case-insensitive).
- Macros (aliases)
- `@yearly` = `0 0 1 1 *`; `@annually` = `0 0 1 1 *`; `@monthly` = `0 0 1 * *`; `@weekly` = `0 0 * * 0`; `@daily` = `0 0 * * *`; `@midnight` = `0 0 * * *`; `@hourly` = `0 * * * *`. `@reboot` é um não-agendamento especial (roda apenas no boot) e é rejeitado com um erro explicativo.
- Semântica POSIX de dia (regra do OU)
- Quando AMBOS dia do mês e dia da semana estão restritos (nenhum é `*`), o agendamento dispara quando QUALQUER um bate — semântica de OU. Quando apenas um está restrito, ele decide. Quando ambos são `*`, todo dia bate. Essa regra do OU se aplica ao vixie cron, BSD cron e à maioria das implementações POSIX; Quartz usa `?` para desambiguar E vs OU.
- Modo de seis campos (Quartz-Lite)
- Se sua entrada tem seis tokens separados por espaço, a ferramenta trata o primeiro como campo de segundos (0-59). Útil para Quartz, Spring `@Scheduled(cron=...)` e node-cron. NÃO portável para crontab do Linux ou agendadores POSIX — eles tratariam seus segundos como minutos e deslocariam tudo em uma posição.
- Ancoragem do operador de passo
- `*/N` é ancorado ao menor valor do campo: `*/15` em minuto = `0,15,30,45`, não "a cada 15 a partir de agora". Com base que não é curinga: `5/15` em minuto = `5,20,35,50`. Valores de passo que não dividem o intervalo do campo igualmente vão pular perto da volta — isso é correto, não é bug.
- Limites de validação
- minuto ∈ [0,59], hora ∈ [0,23], dia do mês ∈ [1,31], mês ∈ [1,12], dia da semana ∈ [0,7]. Valores fora do intervalo produzem um erro no nível do campo. O dia do mês NÃO é validado contra o mês (`0 0 31 2 *` é interpretado normalmente, mas nunca bate porque fevereiro não tem dia 31 — a pré-visualização da próxima execução mostrará "Nenhuma execução próxima").
- Operadores Quartz rejeitados
- Cron POSIX não suporta o `?` (sem valor específico), `L` (último), `W` (dia útil mais próximo) nem `#` (n-ésimo dia da semana) do Quartz. Esta ferramenta os rejeita com uma mensagem clara "Operadores Quartz não suportados" em vez de interpretá-los silenciosamente como POSIX inválido. Para agendamentos Quartz, use uma ferramenta que entenda Quartz ou o scheduler do Spring.
- Limite de ano na busca da próxima execução
- O cálculo da próxima execução busca até 4 anos à frente; expressões que batem com menos frequência (ex.: padrões de "29 de fevereiro") mostrarão "Nenhuma execução nos próximos 4 anos". Isso é por design para evitar iteração ilimitada em padrões impossíveis.
Boas práticas para agendamentos cron
- Use UTC nos servidores, converta na hora de exibir
- Configure seus servidores em UTC (`/etc/timezone` ou `TZ=UTC`) e escreva todas as expressões cron em UTC. Converta para horário local apenas na hora da exibição em seus dashboards e relatórios. Isso elimina toda uma categoria de bugs de fuso horário que atacam mais forte durante transições de horário de verão, quando agendamentos em horário local silenciosamente disparam em dobro ou pulam uma execução. Use o toggle UTC nesta ferramenta para desenhar seu agendamento em UTC desde o início.
- Evite a armadilha do OU entre dia do mês e dia da semana POSIX
- Nunca restrinja tanto dia do mês QUANTO dia da semana a menos que você queira semântica de OU. Se você quer "toda segunda de janeiro", escreva `0 0 * 1 1` (dia do mês é `*`); se você quer "o dia 1º de todo mês", escreva `0 0 1 * *` (dia da semana é `*`). A regra POSIX do OU significa que `0 0 1 * 1` roda no dia 1 E em toda segunda — quase certamente não o que você pretendia. A pré-visualização da próxima execução pega isso se você checar antes do deploy.
- Fixe o fuso do agendamento explicitamente
- Agendadores modernos suportam fixar o fuso na definição do agendamento: `CRON_TZ=America/New_York` no topo de um crontab (vixie cron 3.0+), `spec.timeZone: "America/New_York"` para Kubernetes CronJobs 1.27+, expressão de agendamento com `ScheduleExpressionTimezone` para o AWS EventBridge Scheduler. Fixe o fuso explicitamente em vez de confiar no padrão do servidor — fusos de servidores podem mudar sem aviso durante migrações de infraestrutura.
- Distribua a carga entre minutos, não no :00
- Evite `0 * * * *` (toda hora no minuto 0) para jobs não críticos — em escala, agendar muitas coisas exatamente em :00 cria picos de carga. Escolha um offset aleatório de minuto (`23 * * * *`, `41 * * * *`) para cada job para distribuir a carga. O mesmo vale para jobs diários: `30 3 * * *` é mais amigável para seu banco do que `0 3 * * *` quando muitos jobs convergem em 3:00.
- Torne os jobs idempotentes
- Cron não tem retry embutido, nem prevenção de sobreposição, nem recuperação de execução perdida. Seu job deveria ser seguro para rodar múltiplas vezes (idempotente) e se auto-verificar. Em vez de "enviar relatório às 9h", desenhe como "enviar o relatório de hoje se ainda não foi enviado" — isso se auto-cura depois de downtime, agendamentos duplicados acidentais e execuções concorrentes. Idempotência é uma propriedade do job, não do agendador, e é a prática de confiabilidade mais importante.
- Adicione um heartbeat para agendamentos críticos
- O modo de falha silenciosa do cron é sua maior fraqueza — se o agendamento não dispara, nada te avisa. Para jobs críticos, faça o job pingar um serviço de heartbeat (Healthchecks.io, Cronitor, Dead Man's Snitch) ao final de cada execução; o serviço te alerta se o ping esperado não chega. Isso pega tanto a falha do job quanto a falha do próprio agendamento. O tier grátis cobre a maioria das necessidades pessoais e de equipes pequenas.
- Verifique com a pré-visualização da próxima execução antes do deploy
- Antes de fazer deploy de um novo agendamento cron, olhe para as cinco próximas datas e horas na pré-visualização desta ferramenta. Alterne entre Local e UTC. Confirme que o agendamento cai quando você pretende — não cinco minutos antes, não no dia errado, não pulando o fim de semana que importava. A pré-visualização é o teste de produção mais barato possível.
Perguntas frequentes
O que esta ferramenta faz?
O que é uma expressão cron?
Meus dados são enviados para algum lugar?
Qual a diferença entre cron POSIX e Quartz?
Por que '0 0 1 * 5' roda em toda sexta E no dia 1º?
Como rodo um job a cada 30 segundos?
Qual fuso horário o cron usa?
Para o que '*/15' expande de verdade?
Posso usar uma expressão de seis campos com segundos?
Qual o maior intervalo que o cron consegue expressar?
Como lido com execuções perdidas após downtime?
Por que meu cron do GitHub Actions não roda na hora certa?
Ferramentas relacionadas
Ver todas as ferramentas →Conversor de Timestamp Unix e Epoch — Multi-Precisão
Data e Hora
Converta timestamps Unix para datas instantaneamente com nosso conversor epoch gratuito. Detecta automaticamente segundos, milissegundos e microssegundos. Relógio em tempo real, bidirecional. Sem cadastro, 100% privado.
Conversor de Base Numérica — Binário, Hex, Decimal e Octal
Ferramentas de Conversão
Converta números entre binário, hexadecimal, decimal, octal e qualquer base personalizada (2-36) instantaneamente. Gratuito, privado, sem cadastro — todo o processamento acontece no seu navegador.
Decodificador e Codificador Base64
Codificação e Formatação
Decodifique e codifique Base64 online gratuitamente. Conversão em tempo real com suporte completo a UTF-8 e emoji. 100% privado — executa no seu navegador. Sem necessidade de cadastro.
Conversor CSV para JSON
Codificação e Formatação
Converta CSV para JSON no navegador. RFC 4180, inferência de tipos, cabeçalho, seguro para inteiros grandes. 100% privado, sem upload.
Comprimir Imagens Online — JPEG, PNG e WebP
Ferramentas de Conversão
Reduza o tamanho de imagens em até 80% — comprima JPEG, PNG e WebP no navegador, sem upload. Lote de 20 imagens, ajuste de qualidade, compare antes e depois. Gratuito e privado.
JSON Diff (Comparar)
Codificação e Formatação
Compare dois arquivos JSON instantaneamente no navegador. Destaque lado a lado, saída JSON Patch (RFC 6902), ignore campos ruidosos como timestamps e IDs. 100% privado, sem upload.