Run a Cron Job Every Hour
0 in the minute field with a wildcard hour fires once an hour, on the hour — 00:00, 01:00, 02:00, and so on. The minute is pinned to 0; if it were also *, the job would run every minute. That single 0 is the most common beginner fix in cron debugging.
0 * * * *In plain English: At minute 0.
Field by field
| Field | Value | Meaning |
|---|---|---|
| Minute | 0 | 0 |
| Hour | * | every hour |
| Day of month | * | every day |
| Month | * | every month |
| Day of week | * | every weekday |
Variations
17 * * * *hourly at :17 past — off the congested top of the hour0 9-17 * * *hourly, but only 09:00 through 17:000 */2 * * *every 2 hours insteadTweak any of these in the crontab explainer to see the schedule in plain English and its next run times.
Frequently asked questions
Why does my 'hourly' job run every minute?
You probably wrote * * * * * instead of 0 * * * *. A wildcard minute matches all 60 minutes; pinning it to one value is what makes the schedule hourly.
Should hourly jobs run at minute 0?
Only if they must align to the clock. Minute 0 is when everyone's jobs fire — picking a random minute like :17 or :43 spreads load and often runs faster on shared infrastructure.
New to cron syntax? Read Cron Expressions Explained, Field by Field.