Gerador de Cron
Gera expressões cron (5 campos: minuto, hora, dia, mês, dia-da-semana) com presets comuns e descrição em linguagem natural.
Como funcionam os 5 campos?
São cinco campos no cron: minuto (0-59), hora (0-23), dia do mês (1-31), mês (1-12) e dia da semana (0-6, 0=dom). Em cada um cabem números, listas (1,2,3), faixas (1-5), passos (*/15) e o * (qualquer valor).
Na prática, 0 9 * * 1-5 dispara às 9h nos dias úteis, enquanto */15 * * * * roda a cada 15 minutos.
Comece pelos presets e ajuste o que precisar à mão.
Expressões cron em profundidade: sintaxe, variantes e agendamento real
Uma expressão cron é uma linguagem compacta baseada em tempo usada para descrever quando um job recorrente deve rodar. Introduzida na 7ª edição do Unix em meados da década de 1970, a sintaxe sobreviveu praticamente inalterada por meio século e hoje aparece em distribuições Linux, orquestradores de contêineres como Kubernetes, plataformas de CI como GitHub Actions e schedulers serverless como AWS EventBridge e Vercel Cron. Apesar da semelhança superficial, cada plataforma interpreta os mesmos cinco (ou seis, ou sete) números de uma forma ligeiramente diferente — e errar um dígito é a diferença entre um backup que roda às 3h da manhã e um que roda a cada minuto do dia.
Este gerador emite o formato Unix clássico. Abaixo você encontra uma referência completa de campos, operadores, strings especiais, diferenças de dialeto (Quartz, Spring, Kubernetes, GitHub Actions), exemplos comentados e as armadilhas de timezone/horário de verão que pegam até engenheiros experientes.
Os cinco campos do cron Unix padrão
Uma linha canônica do crontab tem cinco campos separados por espaços, lidos da esquerda para a direita:
┌──────── minuto (0-59)
│ ┌────── hora (0-23)
│ │ ┌──── dia do mês (1-31)
│ │ │ ┌── mês (1-12 ou JAN-DEC)
│ │ │ │ ┌ dia da semana (0-7 ou SUN-SAT; 0 e 7 = domingo)
│ │ │ │ │
* * * * * comando-a-executar
A expressão dispara quando todos os campos casam com o relógio atual — com uma exceção famosa descrita mais abaixo. Alguns schedulers acrescentam um sexto campo de segundos no início, e o Quartz acrescenta um sétimo campo de ano no final; os daemons de Linux e BSD operam apenas com resolução de um minuto.
Curingas, intervalos, listas e passos
*— qualquer valor válido (todo minuto, toda hora, etc.).a-b— intervalo inclusivo.9-17no campo de hora significa 9, 10, 11, 12, 13, 14, 15, 16, 17.a,b,c— lista discreta.0,15,30,45casa com os quartos de hora.*/n— passo de n unidades.*/5em minutos roda em 0, 5, 10, … 55.a-b/n— intervalo com passo.0-23/2em horas significa de duas em duas horas a partir da meia-noite.- Mês e dia-da-semana aceitam abreviações de três letras:
JAN-DEC,SUN-SAT. Os nomes ignoram maiúsculas/minúsculas, mas em algumas implementações não podem ser combinados em intervalos.
Strings de conveniência: @yearly, @monthly, @daily, @hourly, @reboot
O Vixie cron e a maioria dos seus descendentes modernos aceitam atalhos nomeados que se expandem em uma expressão completa de cinco campos:
@yearly (ou @annually) → 0 0 1 1 * meia-noite em 1º de janeiro
@monthly → 0 0 1 * * meia-noite no dia 1 de cada mês
@weekly → 0 0 * * 0 meia-noite de domingo
@daily (ou @midnight) → 0 0 * * * meia-noite, todo dia
@hourly → 0 * * * * no minuto 0 de cada hora
@reboot → ao iniciar o daemon cron (sem hora)
Observação: @reboot não é suportado pelo CronJob do Kubernetes, pelo GitHub Actions nem pelos systemd timers — é uma característica específica do daemon cron.
Diferenças de dialeto: Quartz, Spring, Kubernetes, GitHub Actions
A maior fonte de bugs em agendamentos é supor que todos os schedulers leem a mesma string da mesma forma. Referência rápida:
- Cron Unix / Vixie: 5 campos, dia-da-semana 0-7 (domingo é tanto 0 quanto 7), resolução de um minuto, semântica OR entre dia-do-mês e dia-da-semana.
- Quartz (Java): 6 ou 7 campos — segundos no início, ano opcional no fim. Dia-da-semana vai de 1 a 7, com domingo = 1. Suporta
L(last),W(dia útil mais próximo),#(n-ésima ocorrência) e?(nenhum valor específico). - Spring
@Scheduled: 6 campos (segundos + os 5 padrão). Domingo é 0 como no Unix, e não 1 como no Quartz — armadilha comum ao portar expressões. - Kubernetes CronJob: 5 campos padrão. Os horários são UTC a menos que você defina
.spec.timeZone(k8s 1.25+). PrefixosCRON_TZ=são rejeitados pela validação. - GitHub Actions: 5 campos padrão, apenas em UTC, sem parâmetro de timezone. O menor intervalo é de 5 minutos e períodos de alta carga podem atrasar ou pular execuções.
- AWS EventBridge: 6 campos (ano obrigatório), dia-da-semana 1-7 (domingo = 1), usa
?como o Quartz e não permite especificar dia-do-mês e dia-da-semana ao mesmo tempo.
Exemplos comentados
*/5 * * * * a cada 5 minutos
0 * * * * no minuto 0 de cada hora (em ponto)
30 2 * * * todo dia às 02:30
0 3 * * 1 toda segunda-feira às 03:00
0 0 1 * * meia-noite do dia 1º de cada mês
0 9-17 * * 1-5 a cada hora das 09:00 às 17:00, seg-sex
15 14 1 * * 14:15 do dia 1º de cada mês
0 22 * * 1-5 todo dia útil às 22:00
0 0 */2 * * meia-noite a cada dois dias
*/15 9-17 * * 1-5 a cada 15 min das 09:00-17:59, dias úteis
0 0 1 1 * uma vez por ano, 1º de janeiro à meia-noite
5 4 * * sun todo domingo às 04:05
Armadilhas: semântica OR, timezone e horário de verão
Dia-do-mês e dia-da-semana são combinados com OR, não com AND. A expressão 0 0 13 * 5 dispara no dia 13 de todo mês e em toda sexta-feira — não apenas em sextas-feiras dia 13. Para ter um AND real, restrinja um dos campos na expressão e cheque o outro dentro do seu script, ou use Quartz/AWS, que interpretam um valor literal junto com ? de outra forma.
Timezone. O cron do Linux respeita a variável TZ do sistema; é possível sobrescrever por crontab com a linha CRON_TZ=America/Sao_Paulo. O Kubernetes usa UTC por padrão. O GitHub Actions é UTC sem exceção — se você quer 09:00 em São Paulo (BRT, UTC-3), escreva 0 12 * * *.
Horário de verão. Quando o relógio adianta, os jobs da hora pulada normalmente se perdem; quando atrasa, os jobs da hora repetida podem rodar duas vezes. O Vixie cron moderno tenta evitar ambos os casos, mas o caminho mais seguro é agendar fora da janela entre 01:00 e 04:00 ou rodar em UTC.
O corpo do job. O cron executa comandos com um PATH mínimo e sem shell interativo. Sempre use caminhos absolutos para os binários e redirecione stdout/stderr (>> /var/log/job.log 2>&1) para que as falhas sejam depuráveis.
Onde rodar um agendamento
- crontab em um único host Linux —
crontab -epor usuário. - systemd timers — sintaxe de calendário (incompatível com cron) com logging melhor, grafo de dependências e persistência entre boots.
- Kubernetes CronJob — YAML declarativo, com política de concorrência e budget de retentativas.
- GitHub Actions
on.schedule— jobs disparados pelo CI, apenas em UTC e com granularidade mínima de 5 minutos. - Vercel Cron / Netlify Scheduled Functions — invocam um endpoint HTTPS a partir de um scheduler gerenciado.
- AWS EventBridge / GCP Cloud Scheduler — gatilhos nativos da nuvem com retry e fila de dead-letter.
FAQ
O cron consegue rodar jobs em frequência menor do que um minuto? O cron Unix padrão não consegue. Para agendamento abaixo de um minuto, use Quartz, um systemd timer com OnUnitActiveSec=30s ou um pequeno loop dentro do próprio script.
Qual a diferença entre 0 e * no campo de minuto? 0 dispara só no minuto zero; * dispara em todo minuto. 0 * * * * é de hora em hora; * * * * * é de minuto em minuto (sessenta vezes por hora).
Por que meu job rodou duas vezes? Causas comuns: retorno do horário de verão, dois daemons cron (sistema + usuário) lendo o mesmo arquivo, ou uma execução anterior que excedeu o intervalo e se sobrepôs — proteja com flock para impedir execuções concorrentes.
O @reboot garante que meu job rode a cada boot? Apenas se o daemon cron iniciar depois das condições que o seu script precisa (rede, mounts). Em Linux moderno, prefira uma unit do systemd com After=network-online.target.
Existe um jeito de testar uma expressão antes de colocar em produção? Sim — cole a expressão em um validador como o crontab.guru, ou use este gerador e inspecione as próximas N execuções no log da sua CI antes de promover para produção.
Monte expressões cron com facilidade
Agendar tarefas no cron exige montar aquela sequência de cinco campos (minuto, hora, dia, mês e dia da semana) de sintaxe traiçoeira. Este gerador ajuda você a chegar na expressão certa e já traz presets para os agendamentos mais frequentes.
Comece por um modelo pronto (todo dia em tal hora, toda segunda, de hora em hora) ou ajuste campo a campo. Enquanto isso, a ferramenta descreve em texto o que aquela expressão vai fazer. Ler a explicação em português ao lado evita o clássico tropeço de agendar a tarefa para a hora errada.
A geração acontece no navegador, sem espera. É uma mão na roda para configurar crontabs, agendadores de CI ou qualquer sistema que use a sintaxe cron, dispensando decorar a ordem dos campos.
Ferramentas Relacionadas
Editor de Expressão Cron
Interprete e construa expressões cron com descrição em português, próximas execuções e atalhos para as configurações mais usadas.
Cron Parser (descrever expressão)
Cole uma expressão cron e veja em texto natural quando ela vai disparar (ex: "todo dia às 9h" para `0 9 * * *`). Lista as próximas N execuções. Tudo no navegador.
Calculadora de Permissões Unix (chmod)
Calcule permissões Unix de forma visual. Marque leitura, escrita e execução para owner, group e others e obtenha o código octal (ex: 755) e a notação simbólica (ex: rwxr-xr-x).