0 0 1 * *Campos
| Minuto | 0 | 0 |
|---|---|---|
| Hora | 0 | 0 |
| Día del mes | 1 | 1 |
| Mes | * | cualquiera |
| Día de la semana | * | cualquiera |
Dónde usarla
| crontab | 0 0 1 * * /path/to/script.sh |
|---|---|
| GitHub Actions | - cron: "0 0 1 * *" (on.schedule) |
| Kubernetes CronJob | schedule: "0 0 1 * *" |
crontab usa la zona horaria del servidor; GitHub Actions siempre usa UTC.
A tener en cuenta
0 0 1 * * se ejecuta a medianoche el día 1 de cada mes, igual que @monthly. La facturación, las facturas y los informes mensuales suelen ir aquí, así que decide qué zona horaria define “el día 1”: en un servidor en UTC, en América todavía es el último día del mes anterior. Un informe del mes pasado debería calcular su rango de fechas a partir de la fecha de ejecución, nunca suponer 30 o 31 días.
Vixie cron y cronie no tienen sintaxis para el último día del mes; ejecuta con 0 0 28-31 * * y comprueba la fecha dentro del comando, por ejemplo test $(date -d tomorrow +\%d) = 01 && /path/to/script.sh. Quartz y algunos planificadores en la nube admiten L en su lugar. Cuidado con la regla del OR: 0 0 1 * 1 se ejecuta el día 1 y todos los lunes, no los lunes que caen en día 1.