Como Ler e Entender Expressões Cron
Uma expressão cron é uma string de cinco ou seis campos que descreve um agendamento recorrente. Depois que você aprender o padrão, poderá ler qualquer expressão cron como inglês simples. Este guia ensina a decodificar cada elemento da sintaxe cron, desde simples * * * * * até expressões complexas com intervalos, passos e caracteres especiais.
Os Cinco Campos do Cron
Toda expressão cron tem cinco campos de tempo seguidos pelo comando:
┌───────── Minuto (0-59)
│ ┌──────── Hora (0-23)
│ │ ┌─────── Dia do Mês (1-31)
│ │ │ ┌────── Mês (1-12)
│ │ │ │ ┌───── Dia da Semana (0-7, 0 e 7 = Domingo)
│ │ │ │ │
* * * * * <comando>
Lendo da esquerda para a direita: "Em qual minuto, em qual hora, em qual dia do mês, em qual mês e em qual dia da semana?"
Lendo Expressões Passo a Passo
Exemplos Simples
0 9 * * *
Leia como: "No minuto 0, na hora 9, todo dia do mês, todo mês, todo dia da semana." → Executa diariamente às 9:00.
*/15 * * * *
Leia como: "A cada 15 minutos de cada hora, todo dia." → Executa a cada 15 minutos.
30 8 * * 1-5
Leia como: "No minuto 30, na hora 8, todo dia do mês, todo mês, segunda a sexta." → Executa em dias úteis às 8:30.
0 0 1 * *
Leia como: "À meia-noite do primeiro dia de cada mês." → Executa mensalmente.
Exemplos Complexos
0 9-17/2 * * 1-5
Dividindo:
0— no minuto 09-17/2— a cada 2 horas das 9 às 17 (ou seja, 9, 11, 13, 15, 17)*— todo dia do mês*— todo mês1-5— segunda a sexta
→ Executa às 9:00, 11:00, 13:00, 15:00 e 17:00 em dias úteis.
30 6 1,15 * 0
Dividindo:
30— no minuto 306— na hora 61,15— no dia 1 e dia 15 do mês*— todo mês0— apenas no domingo
→ Executa às 6:30 nos dias 1 e 15 do mês, apenas se esses dias forem também domingos.
Referência de Caracteres Especiais
* — Todo / Todos
Corresponde a qualquer valor para aquele campo.
0 * * * * → "A cada hora"
* * * * * → "A cada minuto"
, — Lista / Ou
Separa múltiplos valores.
0 9,12,15 * * * → "Às 9h, 12h e 15h"
- — Intervalo
Define um intervalo inclusivo de valores.
0 9-17 * * * → "A cada hora das 9h às 17h"
30 8 * * 1-5 → "Dias úteis às 8:30"
/ — Passo
Divide o campo em incrementos.
*/15 * * * * → "A cada 15 minutos"
0 */2 * * * → "A cada 2 horas"
0 0 */3 * * → "A cada 3 dias"
Passos podem ser combinados com intervalos:
0 9-17/2 * * * → "A cada 2 horas das 9h às 17h"
30 */4 * * 1-5 → "A cada 4 horas em dias úteis, no minuto 30"
L — Último (alguns sistemas)
Em algumas implementações cron (como Quartz), L significa "último."
0 0 L * * → "Último dia de cada mês"
# — N-ésima ocorrência (alguns sistemas)
0 9 * * 1#1 → "Primeira segunda-feira de cada mês às 9h"
Expressões Comuns Decodificadas
| Expressão | Legível em Português | Descrição |
|---|---|---|
* * * * * |
A cada minuto | |
*/5 * * * * |
A cada 5 minutos | |
0 * * * * |
No minuto 0 de cada hora | A cada hora |
0 */2 * * * |
A cada 2 horas | |
0 9 * * * |
Todos os dias às 9h | Diário |
0 9,17 * * * |
Todos os dias às 9h e 17h | |
0 9 * * 1-5 |
Dias úteis às 9h | |
30 8 * * 1 |
Segundas às 8:30 | |
0 0 1 * * |
Primeiro de cada mês | Mensal |
0 0 1 1 * |
1º de janeiro à meia-noite | Anual |
*/15 9-17 * * 1-5 |
A cada 15 min durante horário comercial em dias úteis | |
0 0 * * 0 |
Todo domingo à meia-noite | Semanal |
0 0 */2 * * |
A cada 2 dias à meia-noite | |
0 22 * * 5 |
Toda sexta às 22h |
Cron de Seis Campos (Com Segundos)
Algumas implementações cron (como Quartz Scheduler) usam seis campos, adicionando segundos no início:
┌───────── Segundos (0-59)
│ ┌──────── Minuto (0-59)
│ │ ┌─────── Hora (0-23)
│ │ │ ┌────── Dia do Mês (1-31)
│ │ │ │ ┌───── Mês (1-12)
│ │ │ │ │ ┌──── Dia da Semana (0-7)
│ │ │ │ │ │
* * * * * * <comando>
0 */5 * * * * → "A cada 5 minutos, no segundo 0"
0 0 9 * * * → "Todos os dias às 9:00:00"
Atalhos Não Padronizados
Muitas implementações cron suportam estes aliases:
@yearly → 0 0 1 1 * → "Uma vez por ano"
@monthly → 0 0 1 * * → "Uma vez por mês"
@weekly → 0 0 * * 0 → "Uma vez por semana"
@daily → 0 0 * * * → "Uma vez por dia"
@hourly → 0 * * * * → "Uma vez por hora"
@reboot → (não é horário) → "Executar na inicialização"
Traduzindo Cron para Legível
Quando você vir uma expressão cron desconhecida, decodifique-a campo por campo:
Expressão: 45 17 1,15 * 1-5
| Campo | Valor | Significado |
|---|---|---|
| Minuto | 45 | No minuto 45 |
| Hora | 17 | Às 17h |
| Dia do Mês | 1,15 | Nos dias 1 e 15 |
| Mês | * | Todo mês |
| Dia da Semana | 1-5 | Segunda a sexta |
Resultado: "Às 17:45 nos dias 1 e 15 de cada mês, apenas se esses dias forem dias úteis."
Expressão: 0 0 * * 0
| Campo | Valor | Significado |
|---|---|---|
| Minuto | 0 | À meia-noite |
| Hora | 0 | Às 0 (meia-noite) |
| Dia do Mês | * | Todo dia |
| Mês | * | Todo mês |
| Dia da Semana | 0 | Domingo |
Resultado: "Todo domingo à meia-noite."
Armadilhas Comuns ao Ler Cron
Armadilha 1: * em dia-da-semana E dia-do-mês significa ambos correspondem
Quando tanto dia-do-mês quanto dia-da-semana são *, a expressão executa em qualquer dia. Mas quando ambos têm valores específicos, o job executa se QUALQUER UM corresponder — é uma condição OU.
0 9 15 * 1
Isso executa às 9h no dia 15 do mês E em toda segunda-feira (não "dia 15 E segunda"). Para executar apenas quando ambos corresponderem, você precisa de duas entradas crontab separadas ou lógica em nível de script.
Armadilha 2: Cron usa hora local, não UTC
Cron usa a hora local do sistema. Em servidores configurados para UTC, 0 9 * * * executa às 9h UTC. Sempre verifique o fuso horário do servidor antes de definir agendamentos.
Armadilha 3: 0 e 7 são ambos domingo
No campo dia-da-semana, tanto 0 quanto 7 representam domingo. Isso é um legado de implementações Unix antigas.
Ferramenta Online
A ferramenta 解析ador de Expressão Cron no Help2Code decodifica qualquer expressão cron em uma descrição legível. Cole uma expressão como */15 9-17 * * 1-5 e veja uma análise campo por campo, próximos horários de execução e uma explicação em português claro. Construa novas expressões com a ferramenta Gerador de Comando de Job Cron.
Conclusão
Ler expressões cron é uma habilidade que se torna natural com a prática. Lembre-se dos cinco campos: minuto, hora, dia-do-mês, mês, dia-da-semana. Use o curinga * para "todo", intervalos com - para abrangências, passos com / para intervalos e listas com , para valores específicos. Decodifique qualquer expressão desconhecida campo por campo e use a ferramenta 解析ador de Expressão Cron para verificar seu entendimento.