PatternCron
Once a year
The annual-renewal schedule: fires at 09:00 on January 1st, exactly once, then stays silent for the next 364 days.
Last updated
In plain English
- Fires once, at 09:00 on January 1st
- 1 run per year
Why it’s written this way
Minute 0, hour 9, day-of-month 1, month 1, day-of-week left open: the only date that satisfies all four is January 1st. This is the same expression the @yearly macro expands to internally.
A once-a-year job is the extreme case of every scheduling decision cron makes elsewhere — there's no second chance later in the same cycle if something goes wrong, which changes how much you should trust it running unattended.
Edge cases to know
- →If the server is down, rebooting, or mid-maintenance at 09:00 on January 1st, this run is skipped entirely and doesn't happen again until the following year — for a renewal or certificate-expiry job, that's a year-long gap, not a missed minute.
- →Because the window between runs is so wide, a typo in the schedule can go unnoticed for months; pair a yearly cron job with an external monitor that alerts if the expected run never checks in.
- →New Year's Day is a common day for infrastructure to be short-staffed — worth asking whether a business-critical annual job should really fire on the one day least likely to have anyone watching it.