Cron example · Hours

Every hour in cron

Runs once an hour, on the hour.

0 * * * * Open in the generator

The minute field is 0, so the job fires at 00:00, 01:00, 02:00 and so on. The classic mistake is * */1 * * *: the asterisk in the minute field matches every minute, so that expression runs sixty times an hour.

To run at a different minute past the hour, change the first field: 30 * * * * runs at half past. Many cron implementations also accept the shorthand @hourly, which is exactly 0 * * * *.

Field by field

ValueFieldMeaning
0Minute
0–59
at minute 0
*Hour
0–23
every hour
*Day of month
1–31
every day of the month
*Month
1–12 or JAN–DEC
every month
*Day of week
0–7 or SUN–SAT (0 and 7 are Sunday)
every day of the week

Next run times

Computed in your browser from the current time, so you can check the schedule against a clock you trust.

Your timezone (local)

  1. Needs JavaScript.

UTC (GitHub Actions, Kubernetes default)

    Variations

    • 30 * * * *every hour at half past · try it
    • 0 */2 * * *every 2 hours · see page
    • 0 9-17 * * 1-5every hour during business hours · see page

    Where this expression works

    • Linux and macOS crontab: as written; times follow the system timezone.
    • Kubernetes CronJob: the same five fields; UTC unless spec.timeZone is set.
    • GitHub Actions: the same syntax in UTC, minimum interval five minutes, no @ shortcuts.
    • AWS EventBridge: a different six-field syntax; do not paste this expression unchanged.

    Full platform comparison · Cron tutorial

    FAQ

    Why does 0 */1 * * * run every hour but * */1 * * * every minute?

    The hour field is the same in both. The difference is the minute field: 0 restricts runs to minute zero; * matches all sixty minutes.

    Does @hourly work everywhere?

    It works in Vixie cron, cronie and Kubernetes CronJobs, but GitHub Actions and AWS EventBridge reject it. Use 0 * * * * for portability.