Expressões Cron Desmistificadas: Agende Qualquer Coisa
Você precisa executar um backup de banco de dados toda noite às 3h da manhã. Ou enviar um relatório toda segunda-feira de manhã. Ou limpar um cache a cada 15 minutos. Em servidores Linux e Unix, a ferramenta para isso é o cron, e a maneira de dizer ao cron quando executar algo é com uma expressão cron.
Expressões cron parecem intimidadoras à primeira vista. 0 3 * * * ou */15 9-17 * * 1-5 podem parecer sem sentido se você não conhece o padrão. Mas a sintaxe é surpreendentemente simples quando você entende os cinco campos.
Os Cinco Campos
Toda expressão cron padrão tem exatamente cinco campos, separados por espaços. Cada campo representa uma unidade de tempo:
┌───────────── minuto (0-59)
│ ┌───────────── hora (0-23)
│ │ ┌───────────── dia do mês (1-31)
│ │ │ ┌───────────── mês (1-12)
│ │ │ │ ┌───────────── dia da semana (0-7, onde 0 e 7 são domingo)
│ │ │ │ │
* * * * *
É isso. Cinco campos, da esquerda para a direita: minuto, hora, dia do mês, mês, dia da semana.
Você sabia? O nome "cron" vem da palavra grega "chronos", que significa tempo. O daemon cron (processo em segundo plano) é parte fundamental dos sistemas operacionais tipo Unix desde 1975.
Os Caracteres Especiais
Asterisco (*) — Todo Valor
Um asterisco significa "todo valor possível" para aquele campo.
* * * * * = a cada minuto de cada hora de cada dia.
Vírgula (,) — Múltiplos Valores
Uma vírgula separa valores individuais.
0 9,12,18 * * * = no minuto 0 das horas 9, 12 e 18 (9:00, 12:00, 18:00).
Traço (-) — Intervalo de Valores
Um traço define um intervalo.
0 9-17 * * * = no minuto 0 de cada hora das 9 às 17 (9:00 às 17:00, a cada hora).
Barra (/) — Valores em Passos
Uma barra define intervalos.
*/15 * * * * = a cada 15 minutos (minuto 0, 15, 30, 45 de cada hora).
0 */2 * * * = a cada 2 horas no minuto 0 (meia-noite, 2h, 4h, ...).
Lendo Expressões Cron: Prática
Vamos trabalhar com exemplos comuns. Para cada um, leia os cinco campos da esquerda para a direita.
0 3 * * * — Diariamente às 3:00
| Campo | Valor | Significado |
|---|---|---|
| Minuto | 0 | No minuto 0 |
| Hora | 3 | Da hora 3 (3h) |
| Dia do mês | * | Todo dia |
| Mês | * | Todo mês |
| Dia da semana | * | Todo dia da semana |
Tradução: "Às 3:00 da manhã todos os dias." A escolha clássica para backups noturnos.
*/15 * * * * — A Cada 15 Minutos
| Campo | Valor | Significado |
|---|---|---|
| Minuto | */15 | A cada 15 minutos |
| Hora | * | Toda hora |
| Dia do mês | * | Todo dia |
| Mês | * | Todo mês |
| Dia da semana | * | Todo dia |
Tradução: "A cada 15 minutos, 24 horas por dia." Comum para verificações de saúde e atualização de cache.
0 9 * * 1-5 — Dias úteis às 9:00
| Campo | Valor | Significado |
|---|---|---|
| Minuto | 0 | No minuto 0 |
| Hora | 9 | Da hora 9 |
| Dia do mês | * | Todo dia |
| Mês | * | Todo mês |
| Dia da semana | 1-5 | Segunda a sexta |
Tradução: "Às 9:00, de segunda a sexta." Perfeito para relatórios diários de trabalho.
0 0 1 * * — Primeiro Dia de Cada Mês
| Campo | Valor | Significado |
|---|---|---|
| Minuto | 0 | No minuto 0 |
| Hora | 0 | Da hora 0 (meia-noite) |
| Dia do mês | 1 | No dia 1 |
| Mês | * | Todo mês |
| Dia da semana | * | Qualquer dia da semana |
Tradução: "À meia-noite do primeiro dia de cada mês." Usado para relatórios mensais, cobranças ou limpezas.
30 8 * * 1 — Segundas-feiras às 8:30
| Campo | Valor | Significado |
|---|---|---|
| Minuto | 30 | No minuto 30 |
| Hora | 8 | Da hora 8 |
| Dia do mês | * | Todo dia |
| Mês | * | Todo mês |
| Dia da semana | 1 | Segunda-feira |
Tradução: "Às 8:30 toda segunda-feira." Ótimo para notificações semanais da equipe.
Escrevendo Suas Próprias Expressões Cron
Aqui está uma abordagem sistemática:
- Comece com quando. "Todo dia às 3h" ou "a cada 5 minutos durante o horário comercial."
- Preencha os campos da esquerda para a direita. Comece com minuto, depois hora, depois dia do mês, depois mês, depois dia da semana.
- Use
*para "todos." Se você não se importa com um campo, use*. - Teste antes de implantar. Sempre verifique se sua expressão produz o agendamento esperado.
Referência Rápida de Padrões Comuns
| Agendamento | Expressão |
|---|---|
| A cada minuto | * * * * * |
| A cada 5 minutos | */5 * * * * |
| A cada hora | 0 * * * * |
| Todo dia à meia-noite | 0 0 * * * |
| Todo dia às 3:00 | 0 3 * * * |
| Toda segunda às 9:00 | 0 9 * * 1 |
| Dias úteis às 8:30 | 30 8 * * 1-5 |
| Primeiro de cada mês | 0 0 1 * * |
| A cada 15 min, horário comercial | */15 9-17 * * 1-5 |
| Duas vezes ao dia (9h e 18h) | 0 9,18 * * * |
| Todo domingo às 2:00 | 0 2 * * 0 |
Erros Comuns
Esquecer Que as Horas São 0-23
Hora 13 é 13:00 (1 da tarde), não hora 1. Um erro comum é escrever 0 1 * * * pensando que executa às 13:00 quando na verdade executa à 1:00 da manhã.
Confusão com Dia da Semana
Domingo pode ser 0 ou 7 (ambos são válidos). Segunda é 1, sábado é 6. Algumas pessoas esperam que segunda seja 0.
Interação entre Dia do Mês e Dia da Semana
Se você especificar tanto dia do mês quanto dia da semana (nenhum é *), a maioria das implementações cron executa o job quando qualquer condição é atendida, não quando ambas são atendidas. Isso pega muitas pessoas de surpresa.
Atenção A expressão 0 9 15 * 1 NÃO significa "às 9h no dia 15, mas apenas se for segunda-feira." Significa "às 9h no dia 15 de cada mês E às 9h em toda segunda-feira." Esta é uma fonte comum de comportamento inesperado.
Atenção ao Fuso Horário
O cron executa no fuso horário local do servidor. Se seu servidor está em UTC e você está no Brasil (UTC-3), um job cron 0 9 * * * executa às 6:00 da manhã no seu horário. Sempre verifique o fuso horário do seu servidor.
Dica Teste e visualize suas expressões cron antes de implantá-las: Como Ler e Testar Expressões Cron. Veja os próximos horários de execução e confirme que o agendamento corresponde ao que você pretende.
Crie e teste suas expressões cron:
Gratuito, instantâneo e sem necessidade de cadastro.