Skip to content
cronhelp.me
Guide · Foot-guns

Fires only on February 29th

Short answer
This schedule runs only on February 29th, so it fires roughly once every four years. That is legitimate, but rarely what people intend.
Wrongonly February 29th — leap years only
0 0 29 2 *
Rightthe 29th of every month, if that was the intent
0 0 29 * *

February 29th exists only on leap years, so a schedule pinned to exactly that date runs about once every four years — and not on the simple "every fourth year" rule, since century years like 1900 and 2100 are not leap years. 0 0 29 2 * is the canonical example: day 29, month February, and nothing else.

This is an informational note, not an error, because the schedule genuinely does run — unlike never-fires, which flags dates such as February 30th that never occur. The distinction matters: the linter caps February at 29 days precisely so that a real, if rare, leap-day schedule is not mistaken for an impossible one.

The reason it is worth surfacing is that a once-every-four-years job is almost never what someone means to create, and when it is intended it deserves special care. A job that runs so infrequently is easy to forget, hard to test, and unforgiving if it fails — you may not discover the failure until the next leap year. If you are relying on a leap-day run for something important, add monitoring so a silent miss does not go unnoticed for years, and consider testing the code path on an ordinary date first.

If you did not mean "only on leap day", look again at the day and month fields. A common slip is over-restricting a schedule: you wanted the 29th of every month, or a February job on a safe date, and accidentally pinned both fields. For the 29th of every month, drop the month restriction (0 0 29 * *); for a dependable February job, use the 28th (0 0 28 2 *). If the quadrennial cadence is exactly right, then this expression is correct as written.

Watch the linter flag it live — the finding below appears the moment the expression is entered:

Cron expression5-field
At 12:00 AM, on day 29 of the month, only in February
Lint
Infoleap-day-only
This job runs only on February 29th, a date that exists just once every four years. If you meant every February, use the 28th instead; if you really meant leap day, keep it as is.
Learn more →
Next runs
#
1
2
3
4
5
6
7
Copy as
All lint rulesSeverity: Info