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
| Value | Field | Meaning |
|---|---|---|
| 0 | Minute 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)
- Needs JavaScript.
UTC (GitHub Actions, Kubernetes default)
Variations
30 * * * *every hour at half past · try it0 */2 * * *every 2 hours · see page0 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.timeZoneis 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.