Cron Every Hour
Top-of-hour cron at a glance — 0 * * * * with live next runs, the @hourly macro, and each dialect's form ready to copy.
History
Valid expressions you run are kept here — on this device only.
The plain-English description appears here.
| # | UTC | UTC time | DST |
|---|---|---|---|
| Upcoming runs for a valid expression appear here. | |||
—Press ? for shortcuts
Platform variants
Classic cron
Cron expression: 0 * * * *
Top of every hour — the @hourly macro expands to exactly this.
Quartz
Cron expression: 0 0 * * * ?
Quartz form: second 0, minute 0, every hour; day-of-week ?.
AWS EventBridge
Cron expression: cron(0 * * * ? *)
Minute 0 of every hour; EventBridge requires the ? day field.
Kubernetes
Cron expression: 0 * * * *
CronJob also accepts the @hourly macro for this schedule.
GitHub Actions
Cron expression: 0 * * * *
GitHub warns of load spikes at the top of the hour — expect delays.
Also covers: hourly, @hourly
Do it offline:$ (crontab -l; echo "0 * * * * /path/to/job") | crontab -
How to use it
- Copy 0 * * * * anywhere plain cron is read; @hourly does the same job in crontabs and CronJobs that accept macros.
- If the top of the hour is busy on your platform, move the run — any minute, 17 say, in the first field.
- Confirm in the tester that the read-back says hourly, not every minute, before the line ships.
0 * * * * fires at minute zero of every hour — twenty-four runs a day, the standard cadence for report rollups, cache warming and cleanup passes. This page keeps the hourly line honest: live next runs, the @hourly macro it matches, the six-field lookalike that silently means something else, and each dialect's spelling.
Examples
0 * * * *describes Every hour
next 1 2026-08-01T01:00:00.000Z
next 2 2026-08-01T02:00:00.000Z
next 3 2026-08-01T03:00:00.000Z
next 4 2026-08-01T04:00:00.000Z
next 5 2026-08-01T05:00:00.000ZMinute zero, hour after hour: the preview steps in exact one-hour increments from the fixed instant — the flattest rhythm in this library.
* 0 * * *describes Every minute, between 00:00 and 00:59
next 1 2026-08-01T00:01:00.000Z
next 2 2026-08-01T00:02:00.000Z
next 3 2026-08-01T00:03:00.000Z
next 4 2026-08-01T00:04:00.000Z
next 5 2026-08-01T00:05:00.000ZFields swapped by accident: a wildcard minute during hour zero runs sixty times between midnight and one, then sleeps 23 hours. The read-back catches it instantly.
Every example on this page is executed against the same engine that powers the tool, on every build.
Gotchas worth knowing
Everyone schedules on the hour
Minute zero is the most crowded slot in any shared scheduler — GitHub's docs warn top-of-hour workflows can queue. An offset like 17 * * * * keeps the cadence and skips the rush, still once per hour at :17.
Common errors
Six fields detected — the first is seconds, so this schedule runs at seconds resolution.- One extra * changes everything: read as six fields, this fires every minute at second zero — 1,440 runs a day, not 24. The note is the tell; trim to five fields.
FAQ
Is @hourly exactly this expression?
Yes — shorthand for minute zero of every hour; the tester's expansion note shows it. Not every scheduler takes macros, so the five-field form travels better.
What happens to an hourly job through a DST change?
In UTC, nothing — every UTC hour is sixty minutes. A local-zone crontab can skip or repeat a run when the clock jumps; the cron timezone converter maps those dates.
Why not * * * * * with an hour check in the job?
Sixty wake-ups for one hour's work, and the check becomes untested schedule logic. Cadence belongs in the cron line, where the preview is the source of truth.