A Expressão 0 0 * * 1-5
A expressão cron 0 0 * * 1-5 dispara à meia-noite, de segunda a sexta. Detalhamento dos campos: minuto (0), hora (0), dia do mês (*), mês (*), dia da semana (1-5).
O Intervalo 1-5 no Campo de Dia da Semana
Dia da semana no cron POSIX é o quinto campo:
| Número | Dia |
|---|---|
| 0 | Domingo |
| 1 | Segunda |
| 2 | Terça |
| 3 | Quarta |
| 4 | Quinta |
| 5 | Sexta |
| 6 | Sábado |
| 7 | Domingo (alias) |
Alias SEG-SEX
No Vixie cron e na maioria das implementações modernas, abreviações de três letras funcionam:
0 0 * * SEG-SEX # idêntico a 0 0 * * 1-5
0 0 * * SEG,QUA,SEX # Segunda, Quarta, Sexta apenas
0 0 * * TER,QUI # Terça e Quinta
Por que Agendamentos Apenas em Dias Úteis Existem
O principal motivo é disponibilidade humana. Sistemas automatizados que notificam, alertam ou fazem deploy devem considerar se há alguém por perto para responder.
Feriados Não São Tratados pelo Cron
O cron não tem conhecimento de feriados públicos. Um trabalho agendado com 1-5 executará no Natal e Ano Novo se caírem em um dia útil.
Padrões Comuns de Dias Úteis
0 9 * * 1-5 # 9 AM dias úteis
0 6 * * 1-5 # 6 AM dias úteis
0 18 * * 1-5 # 6 PM dias úteis
*/15 9-17 * * 1-5 # a cada 15 min, 9 AM às 5 PM, dias úteis
0 9,12,17 * * 1-5 # 9 AM, meio-dia e 5 PM dias úteis
Interação Entre dia do mês e dia da semana
Se ambos os campos estiverem explicitamente definidos (nenhum é *), o cron executa na união de ambas as restrições, não na interseção.
0 0 15 * 1-5 # executa no dia 15 de qualquer mês E em cada dia útil
Verificando o Agendamento
from croniter import croniter
from datetime import datetime
cron = croniter("0 0 * * 1-5", datetime.now())
for _ in range(7):
print(cron.get_next(datetime))