cron expression · plain english
Cron once per year on January 1
Fires at midnight on January 1 — once per year, exactly. Annual-cadence jobs: yearly archive rotation, certificate renewals, year-end report rollups.
beginner
POSIX / Jenkins / Quartz / AWS
0 0 1 1 *
cron once per year on january 1.
Next 5 fire times
Computed live in your local timezone. The cron expression itself is timezone-agnostic — these times reflect your browser clock.
Cross-system syntax variants
Same intent, different schedulers. Use this table when migrating between systems.
| System | Expression | Note |
|---|---|---|
| Standard cron (POSIX) | 0 0 1 1 * | minute=0, hour=0, DOM=1, month=1 |
| Cron (shortcut) | @yearly | or @annually — both alias for `0 0 1 1 *` |
| Jenkins | H H 1 1 * | minute and hour hashed |
| Quartz (Java) | 0 0 0 1 1 ? | 6-field, ? for DOW |
| systemd timer | OnCalendar=yearly | = *-01-01 00:00:00 |
| AWS EventBridge | cron(0 0 1 1 ? *) | Quartz-flavor |
Common pitfalls
- Jan 1 is a US/EU holiday — no on-call to react if the job fails. Either move to Jan 2 (`0 0 2 1 *`) or accept the lag.
- Yearly jobs are infrequent enough that cron drift / restarts can lose them. Use `anacron` or systemd timer with Persistent=true.
- Container deployments: if container restarts on Dec 31 and is up Jan 1 00:00 with cron disabled, you miss the fire entirely. Annual jobs deserve their own infrastructure.
Use cases
- Annual archive rotation
- Year-end financial report
- Certificate / license renewal triggers
- Tax-year boundary jobs
- Annual data retention purge
Translate any cron expression
cronwtf takes any cron string and returns plain-English description plus the next 5 fire times in your timezone. Standard 5-field, Jenkins H, Quartz 6-field — all supported.
Open cronwtf
Related cron schedules
cron every quarter (jan, apr, jul, oct 1st) · cron every 30 minutes (half-hourly) · cron twice daily (midnight and noon) · cron on the first day of every month