Cron Expression: 0 * * * *

0 * * * * Run at the start of every hour

Field Breakdown

ValueFieldMeaning
0minuteat minute 0 (top of the hour)
*hourevery hour
*dayevery day
*monthevery month
*weekdayevery 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

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.