Sintaxe Cron de Relance
Uma expressão cron tem cinco campos separados por espaços:
┌───────────── minuto (0-59)
│ ┌───────────── hora (0-23)
│ │ ┌───────────── dia do mês (1-31)
│ │ │ ┌───────────── mês (1-12 ou JAN-DEZ)
│ │ │ │ ┌───────────── dia da semana (0-7 ou DOM-SAB)
│ │ │ │ │
* * * * *
Caracteres Especiais
| Caractere | Significado | Exemplo | Resultado |
|---|---|---|---|
* | Cada valor | * * * * * | A cada minuto |
, | Lista | 1,15 * * * * | Nos minutos 1 e 15 |
- | Intervalo | 0 9-17 * * * | A cada hora das 9 AM às 5 PM |
/ | Passó | */10 * * * * | A cada 10 minutos |
- + / | Intervalo com passó | 0 8-18/2 * * * | A cada 2 horas das 8 AM às 6 PM |
Agendamentos Comuns
A Cada N Minutos
| Expressão | Dispara | Por hora |
|---|---|---|
* * * * * | A cada minuto | 60 |
*/5 * * * * | A cada 5 minutos | 12 |
*/10 * * * * | A cada 10 minutos | 6 |
*/15 * * * * | A cada 15 minutos | 4 |
*/30 * * * * | A cada 30 minutos | 2 |
Por Hora e Diário
| Expressão | Dispara |
|---|---|
0 * * * * | No início de cada hora |
0 */2 * * * | A cada 2 horas |
0 */6 * * * | A cada 6 horas (meia-noite, 6 AM, meio-dia, 6 PM) |
0 0 * * * | Diariamente à meia-noite |
0 6 * * * | Diariamente às 6 AM |
30 4 * * * | Diariamente às 4:30 AM (comum para tarefas de manutenção) |
Agendamentos em Dias Úteis
| Expressão | Dispara |
|---|---|
0 9 * * 1-5 | Dias úteis às 9 AM |
0 0 * * 1-5 | Dias úteis à meia-noite |
0 9 * * 1 | Toda segunda-feira às 9 AM |
0 0 * * 0 | Todo domingo à meia-noite |
0 17 * * 5 | Toda sexta-feira às 5 PM |
Mensal e Anual
| Expressão | Dispara |
|---|---|
0 0 1 * * | Primeiro dia de cada mês à meia-noite |
0 0 15 * * | Dia 15 de cada mês à meia-noite |
0 0 1 1 * | 1 de janeiro à meia-noite (anual) |
0 0 1 */3 * | A cada trimêstre (Jan, Abr, Jul, Out) |
Aliases
Algumas implementações cron suportam aliases abreviados:
| Alias | Equivalente | Significado |
|---|---|---|
@yearly | 0 0 1 1 * | Uma vez por ano (1 de janeiro) |
@monthly | 0 0 1 * * | Uma vez por mês (dia 1 à meia-noite) |
@weekly | 0 0 * * 0 | Uma vez por semana (domingo meia-noite) |
@daily | 0 0 * * * | Uma vez por dia (meia-noite) |
@hourly | 0 * * * * | Uma vez por hora (no início da hora) |
@reboot | N/A | Uma vez na inicialização do sistema |
Intervalos de Valores dos Campos
| Campo | Intervalo | Nomês permitidos |
|---|---|---|
| Minuto | 0-59 | Não |
| Hora | 0-23 | Não |
| Dia do mês | 1-31 | Não |
| Mês | 1-12 | JAN, FEV, MAR, ABR, MAI, JUN, JUL, AGO, SET, OUT, NOV, DEZ |
| Dia da semana | 0-7 | DOM, SEG, TER, QUA, QUI, SEX, SAB (0 e 7 são domingo) |
Nomês de mês e dia da semana não diferenciam maiúsculas/minúsculas na maioria das implementações. Nomês funcionam em intervalos (SEG-SEX) mas não em passos (SEG/2 não é válido).
Armadilhas Comuns
Lógica OR entre campos de dia
Quando tanto dia do mês quanto dia da semana não são curinga, o cron padrão usa lógica OR. 0 9 15 * 1 dispara no dia 15 de cada mês E toda segunda-feira, não apenas segundas que são dia 15.
Fusó horário importa
O cron usa o fusó horário local do sistema por padrão. Se seu servidor está em UTC mas você agenda 0 9 * * * esperando 9 AM no horário de Brasília, o trabalho executa às 9 AM UTC (6 AM BRST ou 7 AM BRST, dependendo do horário de verão). Defina TZ=America/Sao_Paulo no seu crontab ou use CRON_TZ se sua implementação suportar.
Valores de passó não se acumulam
*/5 no campo de minuto reinicia a cada hora. Se um trabalho executa às 10:55, a próxima execução é 11:00, não 11:05. O passó sempre conta a partir do início do intervalo.
Sem precisão de segundos
A menor unidade do cron padrão é 1 minuto. Para agendamento abaixo de 1 minuto, use um processó de longa duração com um loop de sleep, um timer systemd, ou um agendador de trabalhos como Celery Beat ou Temporal.