A expressão cron 0 0 1 * * executa no dia 1 de cada mês à meia-noite. Inclui @monthly, último dia do mês, anos bissextos e o pulo dos dias 29, 30 e 31.
⏰At 12:00 AM, on day 1 of the month
*Qualquer valor,Separador de lista-Intervalo/Passo1-5Intervalo de 1 a 5*/15A cada 15 unidadesA expressão cron 0 0 1 * * dispara no minuto 0, hora 0, no dia 1 de cada mês, independentemente de qual mês ou ano. O trabalho executa à meia-noite em 1 de janeiro, 1 de fevereiro, 1 de março, e assim por diante, exatamente 12 vezes por ano.
| Campo | Valor | Significado |
|---|---|---|
| Minuto | 0 |
No início da hora |
| Hora | 0 |
Meia-noite |
| Dia do mês | 1 |
O dia 1 do mês |
| Mês | * |
Todo mês |
| Dia da semana | * |
Qualquer dia |
@monthly é abreviação para 0 0 1 * *:
@monthly /opt/jobs/billing-cycle
# equivalente a:
0 0 1 * * /opt/jobs/billing-cycle
Se você agendar um trabalho para o dia 29, 30 ou 31, ele será silenciosamente pulado para mêses que não têm esses dias:
| Expressão | Meses pulados |
|---|---|
0 0 29 * * |
Fevereiro (maioria dos anos) |
0 0 30 * * |
Fevereiro |
0 0 31 * * |
Fev, Abr, Jun, Set, Nov |
0 0 29 * * pula fevereiro completamente em anos não bissextos.
Solução prática: execute o trabalho diariamente e verifique a data no script:
#!/bin/bash
if [ "$(daté -d tomorrow +%d)" != "01" ]; then
exit 0
fi
# lógica real do trabalho aqui
Gerar faturas, processar renovações de assinatura ou recalcular cobranças baseadas em uso.
Relatórios financeiros, de vendas e operacionais que consolidam dados do mês anterior.
Mover dados mais antigos que um mês para armazenamento frio.
Rotacionar chaves de API, tokens de atualização ou segredos em cadência mensal.
from croniter import croniter
from datetime import datetime
cron = croniter("0 0 1 * *", datetime.now())
for _ in range(6):
print(cron.get_next(datetime))
0 0 * * * para jobs diários0 0 * * 1-5 para agendamentos de segunda a sextaNothing you paste leaves this tab. Every tool runs entirely in your browser — no upload, no server, no account.