CronTool
Cron expression editor & debugger

Cron every hour — `0 * * * *` explained

The cron expression for every hour is 0 * * * *. The minute field is 0 (top of the hour), the hour is * (every hour), and the remaining fields are wildcards. The job fires 24 times per day, once per hour at minute 00.
It's the canonical “hourly job” cadence — useful for cleanup tasks, hourly snapshots, log rotation, daily-aggregation prep, billing meter reads, and any work that doesn't need sub-hour precision.

Examples

  • 018***
    Every day at 18:00
  • 0*/5***
    Every 5 hours
  • 018**1-5
    Weekdays at 18:00
  • 001**
    Once a month

Cheatsheet

FieldRequiredValues RangeWildcardsminuteYes0-59, - * / hourYes0-59, - * / day of monthYes1-31, - * / L W monthYes1-12, - * /day of weekYes0-7, - * / L

Calendar

View future cron matches in a calendar

April 2026

Showing next 1000 cron schedules

Loading...

Why `0 * * * *` and not `* * * * *`?

The minute field is what determines the cadence here. Wildcarding the minute (* * * * *) gives you every minute — 60 firings per hour. Pinning the minute to 0 gives you exactly one firing per hour, at xx:00.

The hour wildcard * says “every hour”. Combined with minute 0, the full schedule is “every hour, at minute 0”.

Every hour on different platforms

Linux crontab

0 * * * * /path/to/script.sh
# Or with the @hourly alias:
@hourly /path/to/script.sh

Vercel cron jobs

{
  "crons": [
    { "path": "/api/cron/hourly", "schedule": "0 * * * *" }
  ]
}

AWS EventBridge

cron(0 * * * ? *)
# or:
rate(1 hour)

Quartz (Java)

Trigger trigger = newTrigger()
    .withSchedule(cronSchedule("0 0 * * * ?"))
    .build();

Kubernetes CronJob

spec:
  schedule: "0 * * * *"
  concurrencyPolicy: Forbid

Variations on every hour

  • 30 * * * * — every hour at xx:30.
  • 0,30 * * * * — every half hour (twice an hour).
  • 0 */2 * * * — every 2 hours at the top of the hour.
  • 0 9-17 * * 1-5 — hourly during business hours on weekdays.
  • 0 0,12 * * * — at midnight and noon every day (twice daily).
  • */15 * * * * — every 15 minutes (4x as frequent).
  • 0 0 * * * — every day at midnight (24x less frequent).

Hourly cron pitfalls

  • Daylight saving — at the spring-forward hour (typically 02:00 → 03:00), the 02:00 firing is skipped. At the fall-back hour, the 02:00 firing happens twice. Pin to UTC if your job must fire exactly 24 times a day.
  • Top-of-the-hour load spike — every hourly cron in your crontab fires at the same instant. Spread them out: some at 0, some at 15, some at 30, etc. Or use the Jenkins H modifier for deterministic hashing.
  • Long-running hourly jobs — if the work takes more than 60 minutes, you need a lock or a concurrency-aware scheduler. Otherwise the next firing starts before the previous finishes.

Frequently asked questions

What is the cron expression for every hour?

`0 * * * *`. The minute field is `0` (top of the hour), the hour field is `*` (every hour), and the rest are wildcards. The job fires once an hour at minute 00 — 24 times per day.

Is `0 * * * *` the same as `*/60 * * * *`?

Almost. Both fire once per hour at minute 0. But `*/60` is technically invalid in some parsers because the step value can't equal the field's range size. Stick with `0 * * * *` for portability.

How do I run every hour but not at the top of the hour?

Pick the minute you want and pin it: `30 * * * *` fires at every xx:30. `15 * * * *` fires at xx:15. The minute field accepts a single literal. To fire every hour at multiple minutes (xx:00 and xx:30), use a list: `0,30 * * * *`.

How do I run every 2 hours, every 3 hours, etc?

Step in the hour field: `0 */2 * * *` for every 2 hours, `0 */3 * * *` for every 3, `0 */6 * * *` for every 6. The minute pins it to the top of the hour.

How do I run every hour during business hours?

`0 9-17 * * 1-5` — every hour from 09:00 through 17:00 on weekdays. Nine runs per weekday. For tighter cadence within business hours use the minute field too: `*/15 9-17 * * 1-5` for every 15 minutes during the same window.

Ready to schedule it?

Point Crontap at any URL. Pick any cron. Done.

WordPress, Shopify, Railway, Cloud Run, Vercel, HubSpot, Ghost, your own box. If it answers HTTP, Crontap can drive it on a clock you can read, in the timezone that actually matters, and page you when something breaks.

Free forever tier ・ No credit card required

Your next schedule
GET/wp-cron.php?doing_wp_cron=1

Schedule

every 5 minutes

Next run

in 23s

Apihustle Logo

This tool is part of the Apihustle suite - a collection of tools to test, improve and get to know your API inside and out.

  • Clobbr logo

    Clobbr

    The app & CLI tool to test API endpoint speed.

    Visit
  • Crontap logo

    Crontap

    Schedule recurring API calls using cron syntax.

    Visit
  • CronTool logo

    CronTool

    Debug multiple cron expressions on a calendar.

    Visit

  • Page AI

    AI Website Generator that designs and writes clean code.

    Visit
  • Shipixen

    Generate customized boilerplates in minutes.

    Visit
  • Page UI

    Landing page UI components for React & Next.js

    Visit