0 0 1 1 *Fields
| Minute | 0 | 0 |
|---|---|---|
| Hour | 0 | 0 |
| Day of month | 1 | 1 |
| Month | 1 | 1 |
| Day of week | * | any |
Where to use it
| crontab | 0 0 1 1 * /path/to/script.sh |
|---|---|
| GitHub Actions | - cron: "0 0 1 1 *" (on.schedule) |
| Kubernetes CronJob | schedule: "0 0 1 1 *" |
crontab runs in the server’s time zone; GitHub Actions always uses UTC.
Good to know
0 0 1 1 * runs once a year at midnight on 1 January, the same as @yearly and @annually. Jobs this rare are hard to test and easy to forget: by next January the script, its credentials or the server itself may have changed. Run it by hand once after installing, and add monitoring that alerts if no successful run is reported within a year and a day.
Server time may not match the business year: on a UTC server it fires at 01:00 in Central Europe and at 19:00 on 31 December in New York. If the machine is off at that moment, cron won’t catch up, while anacron or a systemd timer with Persistent=true will. For quarterly runs, use 0 0 1 1,4,7,10 * or the equivalent 0 0 1 */3 *.