A Expressão 0 0 * * 0
A expressão cron 0 0 * * 0 dispara à meia-noite todo domingo. Campos: minuto (0), hora (0), dia do mês (*), mês (*), dia da semana (0). Domingo ocupa uma posição única na numeração de dias do cron: é simultaneamente 0 e 7.
Domingo é 0 e 7: Eis Por Quê
O POSIX cron define dias da semana como inteiros de 0 a 6, com 0 sendo domingo:
| Número | Dia |
|---|---|
| 0 | Domingo |
| 1 | Segunda |
| 2 | Terça |
| 3 | Quarta |
| 4 | Quinta |
| 5 | Sexta |
| 6 | Sábado |
| 7 | Domingo (alias) |
O Atalho @weekly
@weekly expande para 0 0 * * 0, meia-noite no domingo.
@weekly # equivalente a 0 0 * * 0
@weekly executa no domingo, não na segunda. Se seu modelo mental de “início da semana” é segunda, você quer 0 0 * * 1, não @weekly.
Casos de Usó para Cron de Domingo
Janelas de manutenção semanais
Domingo à meia-noite é a janela de menor tráfego para a maioria dos serviços voltados ao consumidor. Vacuums de banco de dados, rebuilds de índice e reinicializações de pool de conexões são trabalhos comuns de domingo.
Backups completos de banco de dados
Muitas equipes executam backups incrementais diariamente e backups completos semanalmente. Domingo à meia-noite é o checkpoint natural.
Rotação e arquivamento de logs
Arquivamento semanal de logs é um trabalho comum de domingo que mantém o usó de disco previsível.
Relatórios de resumo semanal
Relatórios de “resumo da semana” são frequentemente gerados no domingo à noite ou segunda de manhã cedo.
Padrão Apenas Fim de Semana
0 0 * * 0,6 # meia-noite no sábado e domingo
Considerações de Fusó Horário
“Fim da semana” não significa nada sem fixar um fusó horário. Um trabalho cron executando como 0 0 * * 0 em um servidor UTC dispara às 00:00 UTC domingo.
Definir o fusó horário do daemon cron
CRON_TZ=America/Sao_Paulo
0 0 * * 0 # meia-noite domingo, horário de Brasília
Verificando o Agendamento
from croniter import croniter
from datetime import datetime
cron = croniter("0 0 * * 0", datetime.now())
for _ in range(5):
print(cron.get_next(datetime))