Cron Expression: 0 * * * *
0 * * * *
Run at the start of every hour
Field Breakdown
| Value | Field | Meaning |
|---|---|---|
| 0 | minute | at minute 0 (top of the hour) |
| * | hour | every hour |
| * | day | every day |
| * | month | every month |
| * | weekday | every weekday |
Running jobs at 0 * * * * (top of the hour) is one of the most common cron patterns. It's also one of the most common causes of server load spikes — because every sysadmin defaults to this expression, dozens of jobs pile up at :00.
Spread top-of-hour jobs
# Instead of all at :00, stagger them: 0 * * * * /usr/local/bin/job-a.sh 5 * * * * /usr/local/bin/job-b.sh 15 * * * * /usr/local/bin/job-c.sh 25 * * * * /usr/local/bin/job-d.sh
Related Expressions
0 * * * *
Every hour at :00
30 * * * *
Every hour at :30
15 * * * *
Every hour at :15
0 */2 * * *
Every 2 hours
0 */6 * * *
Every 6 hours
Common Use Cases
- Cache invalidation
- Report generation
- Log rotation triggers
- Uptime checks
Paste your crontab to visualise every job on a 24-hour timeline — detect overlaps, collisions, and get flock-safe versions.
Open Cron Visualiser →Frequently Asked Questions
What is the difference between 0 * * * * and */60 * * * *?
*/60 is technically invalid — the minute field range is 0-59, so */60 only matches minute 0 (since 60 doesn't exist) and behaves like 0 * * * *. Use 0 * * * * explicitly to be clear.
How do I run a job every hour but not on the hour?
Use a specific minute offset: 15 * * * * runs at :15 past every hour. 45 * * * * runs at :45 past every hour. Offsetting from :00 reduces load concentration.