How 0 * * * * Works
0 * * * * fires at the top of every hour. The 0 in the minute field pins the run to minute zero; the * in the hour field means "every hour." This is one of the most common cron schedules, used for hourly reports, cache invalidation, token refresh, and heartbeat checks.
Equivalent shorthand: @hourly (supported by most cron implementations).
Field Breakdown
| Field | Value | Meaning |
|---|---|---|
| Minute | 0 | At minute zero (top of the hour) |
| Hour | * | Every hour (0–23) |
| Day of month | * | Every day |
| Month | * | Every month |
| Weekday | * | Every day of week |
Next 10 Run Times
Approximate run times starting from the current date. Open in the builder to see exact run times in your timezone.
Platform Examples
0 * * * * /path/to/script.sh
# or use the shorthand:
@hourly /path/to/script.sh
on:
schedule:
- cron: '0 * * * *'
cron(0 * * * ? *)
spec:
schedule: "0 * * * *"
cron.schedule('0 * * * *', () => { ... });
scheduler.add_job(fn, 'cron', minute=0)
Related Cron Expressions
Running hourly schedules in GitHub? Check the GitHub Actions cron guide for UTC-only timing and delayed execution behavior at peak load.
FAQ
Build or explain any cron expression
Use the free visual builder — paste an expression for a plain-English explanation, or click your way to a schedule. See the next 10 run times. No login.
Open CronBuilder →