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

Cron Expression: Every Year

The yearly expression is 0 0 1 1 * — midnight on January 1st. Paste it above to read it in English and preview the next runs. Below: how to pick a different date and the @yearly shortcut.

The expression

0 0 1 1 * runs a job once a year, at 00:00 on January 1st. Change the month and day-of-month to move it: 0 0 1 7 * runs on July 1st.

Field by field

In order: 0 minute, 0 hour, 1 day-of-month, 1 month (January), * weekday. Setting both a day and a month pins the job to one date each year.

Why the weekday stays *

Leave the fifth field as * for a yearly date job. If you set both day-of-month and day-of-week, cron treats them as an OR on most systems — the job would also fire on that weekday, which is rarely what you want for an annual task.

The @yearly shortcut

@yearly (and its alias @annually) expands to 0 0 1 1 * on schedulers that support it.

FAQ

What is the cron expression for once a year?

0 0 1 1 * runs a job once a year at midnight on January 1st. Change the month and day fields for a different date.

Is @yearly the same as 0 0 1 1 *?

Yes. @yearly and @annually both expand to 0 0 1 1 * — midnight on January 1st.

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

Set the day-of-month and month fields and leave weekday as *. For June 15th use 0 0 15 6 *.