crontool
Paste a schedule, read it in English, see the next runs.

Run a Cron Job Once a Year

Use @yearly (or its alias @annually) to run a job once a year at midnight on January 1st. It is shorthand for 0 0 1 1 *. To run yearly on a different date, set the day-of-month and month fields directly.

The shorthand

@yearly and @annually are identical named schedules meaning once a year at 00:00 on January 1st. They expand to 0 0 1 1 *.

Pick a different yearly date

Write the fields explicitly. For 9 AM on March 15th every year use 0 9 15 3 * — minute 0, hour 9, day 15, month 3, any weekday.

Why not a step?

There is no 'every 12 months' step needed — leaving the month field at a single value already makes it fire once per year. A specific day-of-month plus a specific month is the whole trick.

FAQ

What is the cron expression to run once a year?

Use @yearly (or @annually), which equals 0 0 1 1 * — midnight on January 1st. For another date set the day and month, e.g. 0 9 15 3 * for March 15th at 9 AM.

What's the difference between @yearly and @annually?

None — they are aliases for the same schedule, 0 0 1 1 *.

How do I run a cron job every year on a specific date?

Set the day-of-month and month fields: 0 0 15 6 * runs at midnight every June 15th.