0 0 1 * *Campos
| Minuto | 0 | 0 |
|---|---|---|
| Hora | 0 | 0 |
| Dia do mês | 1 | 1 |
| Mês | * | qualquer |
| Dia da semana | * | qualquer |
Onde usar
| crontab | 0 0 1 * * /path/to/script.sh |
|---|---|
| GitHub Actions | - cron: "0 0 1 * *" (on.schedule) |
| Kubernetes CronJob | schedule: "0 0 1 * *" |
O crontab usa o fuso horário do servidor; o GitHub Actions sempre usa UTC.
Bom saber
0 0 1 * * roda à meia-noite do dia 1º de cada mês, o mesmo que @monthly. Cobranças, faturas e relatórios mensais costumam ficar aqui, então decida qual fuso horário define “o dia 1º”: em um servidor em UTC, ainda é o último dia do mês anterior nas Américas. Um relatório do mês passado deve calcular o intervalo de datas a partir da data de execução, nunca supor 30 ou 31 dias.
O Vixie cron e o cronie não têm sintaxe para o último dia do mês; rode em 0 0 28-31 * * e teste dentro do comando, por exemplo test $(date -d tomorrow +\%d) = 01 && /path/to/script.sh. O Quartz e alguns agendadores em nuvem suportam L para isso. Cuidado com a regra do OU: 0 0 1 * 1 roda no dia 1º e em toda segunda-feira, não nas segundas que caem no dia 1º.