Cron: Every Hour
The cron expression for "every hour", what each field means, and the next run times on your clock.
What is the cron expression for every hour?
The hourly cron expression is 0 * * * *. Minute is pinned to 0 and the other four fields are wildcards, so the job fires at the top of every hour, 24 times per day. Most crontabs also accept @hourly as an exact shorthand for this same schedule.
0 * * * *Every hour
- …
- …
- …
- …
- …
Top of the hour, and the trap of swapping fields
In 0 * * * *, the pinned field is the minute and the wildcard hour does the repeating: at minute zero of hour 0, hour 1, hour 2, and so on. Transpose the first two fields and the meaning inverts. * 0 * * * means every minute while the hour equals 0, which is 60 runs packed into the midnight hour and silence for the other 23. It is one of the easier cron typos to ship because both expressions parse cleanly.
Vixie cron also honors the @hourly nickname, which it documents as identical to 0 * * * *. Nicknames read well in a crontab, though they give you no way to adjust the minute later without rewriting the entry in field form.
Minute zero is rush hour
Because @hourly and every tutorial default to minute 0, the top of the hour is when a typical server does the most scheduled work: log shippers flush, report jobs kick off, package mirrors sync. Any shared resource those jobs touch sees a synchronized spike 24 times a day.
If your job does not care which minute it runs on, and hourly jobs rarely do, move it off the peak. 17 * * * * or 43 * * * * delivers the identical once-an-hour cadence with zero contention from the minute-zero crowd. On multi-tenant boxes this single-character change is often the difference between a job that finishes in seconds and one that grinds through a congested disk.
Frequently asked
- Is @hourly the same as 0 * * * *?
- Yes. The crontab(5) man page defines @hourly as exactly 0 * * * *, firing at minute zero of every hour. The nickname form is Vixie cron specific, so prefer the five-field form in tools like Kubernetes CronJobs that do not accept nicknames.
- What is the difference between 0 * * * * and * * * * *?
- 0 * * * * runs once per hour, at minute zero, for 24 daily runs. * * * * * leaves the minute as a wildcard too and runs every single minute, 1,440 times a day. The single leading character changes the frequency by a factor of 60.
- How do I run hourly at half past instead of on the hour?
- Change the minute field: 30 * * * * fires at 30 minutes past every hour. Any value from 0 to 59 works, and picking an uncommon minute keeps you clear of the top-of-hour load spike.
More in this series
// The subscription desk
The Inference Report
The weekly briefing for AI engineers: model releases, pricing moves, benchmarks, and the news that changes what you should build with and what it costs. Every Tuesday, 5-minute read. No fluff.
Join AI engineers who stopped overpaying for tokens. Unsubscribe anytime.