Curated cron expression
Every Hour Cron Expression: 0 * * * *
Learn how 0 * * * * runs hourly, why it fires at minute zero, its next-run pattern, timezone behavior, operational cautions, and equivalent platform schedules.
Meaning at a glance
0 * * * *
Run at the start of every hour
Twenty-four nominal runs per ordinary day, always on an hour boundary.
Next-run example: At 10:07, the next nominal runs are 11:00, 12:00, 13:00, and 14:00.
How 0 * * * * works
The 0 in the minute field selects the top of the hour. All other fields are wildcards, so the schedule fires at 00:00, 01:00, 02:00, and every following hour.
Hourly jobs are ideal for aggregation and maintenance that does not need minute-level freshness. Minute 0 is popular, so shared platforms may see more load then; an offset such as 7 * * * * can be a better operational choice.
| Field | Value | Meaning |
|---|---|---|
| Minute | 0 | At minute zero |
| Hour | * | Every hour, 0 through 23 |
| Day of month | * | Every date |
| Month | * | Every month |
| Day of week | * | Every weekday |
Good use cases
- Hourly metrics aggregation
- Data warehouse loads
- Cache refresh
- Usage and billing snapshots
Timezone and daylight-saving behavior
Minute zero is the same instant pattern across zones, but local hour labels depend on the scheduler timezone.
A local-time hourly schedule can have 23 or 25 labeled hours on a DST transition day. Use UTC for a consistent elapsed cadence.
The expression does not contain a timezone. The scheduler supplies that context. Use the next-run preview above in the same IANA timezone as production, then confirm the target platform's own timezone rules.
Platform compatibility and converted expressions
The source expression is five-field Unix cron. Use the exact equivalent below rather than adding or removing fields by sight.
| Platform | Status | Expression | What to know |
|---|---|---|---|
| Unix crontab | Ready | 0 * * * * | Use directly in a normal five-field user crontab. |
| Kubernetes CronJob | Ready | 0 * * * * | Use as spec.schedule; set spec.timeZone when local wall-clock behavior matters. |
| GitHub Actions | Ready | 0 * * * * | Use under on.schedule; UTC is the default and an IANA timezone may be specified. |
| Vercel Cron Jobs | Plan / behavior limit | 0 * * * * | Valid on eligible plans; Hobby permits only daily schedules. |
| AWS EventBridge Scheduler | Convert | cron(0 * * * ? *) | Convert to AWS minute-first cron(...), add the required year, and use ? in one day field. |
| Spring @Scheduled | Convert | 0 0 * * * * | Use Spring’s six fields by prepending seconds and set zone explicitly when needed. |
| systemd timer | Convert | hourly | Use OnCalendar syntax and validate it with systemd-analyze calendar on the target host. |
Edge cases to check before deployment
- This expression fires at the top of each hour, not one hour after installation.
- Top-of-hour contention can delay best-effort platforms.
- Daily counts can change when the scheduler follows a DST-observing local timezone.
Frequently asked questions
What does the cron expression 0 * * * * mean?
0 * * * * means “run at the start of every hour.” Twenty-four nominal runs per ordinary day, always on an hour boundary.
What are the next run times for 0 * * * *?
At 10:07, the next nominal runs are 11:00, 12:00, 13:00, and 14:00. Exact timestamps depend on the scheduler timezone and the current time.
What timezone does 0 * * * * use?
Minute zero is the same instant pattern across zones, but local hour labels depend on the scheduler timezone.
Can I use 0 * * * * on every scheduling platform?
No. It is a five-field Unix expression. Some platforms accept it directly, while AWS EventBridge Scheduler, Spring, and systemd require the converted form shown in the compatibility table.