Cron every hour
It is 0 * * * *, on the hour, not * * * * *.
Examples temporarily replace the input and settings. You can restore your previous work.
- cron
- • • • • •
• • • • •
•••••••••• •••••• ••••••
• •••••••• •••• ••••••
• • •••••• ••• •• ••••• ••••••
• • • •••• ••••• ••••••
• • • • •• ••• •• •••• ••••• •••••• •• • • ••• • •• •••• ••••••••
• • • • •
•• •••• •••
•••••• •
•••• •••••
••• •• ••••• •••••
••••• •••••
••• •• •••• •••••
•••• •••• •••• •••••••••••••• ••••••
•••••••••• ••••• •••
•••••••••• ••••• •••
•••••••••• ••••• •••
•••••••••• ••••• •••
•••••••••• ••••• •••Your files stay on your device
This tool runs entirely in your browser. What you paste is processed on your device and is never sent to a server, so it is safe to use with tokens, keys and unpublished text.
Example
Example: hourly in New York business hours, on a server that runs on UTC
A small team in New York wants a report job to run every hour from 9 am to 5 pm, Monday to Friday, on a cloud server whose clock is set to UTC, as most are. The page starts on Every hour, 0 * * * *; for anything else, set the menu to “Describe it below instead” and type the schedule in English.
- 0 * * * * runs at minute 0 of every hour: 24 runs a day, 12:00 am, 1:00 am … 11:00 pm by the machine’s clock. Cron watches the clock, so a job added at 9:40 first runs at 10:00, not at 10:40.
- “every hour from 9am to 5pm on weekdays” builds 0 9-17 * * 1-5: nine runs a day, 9:00 am to 5:00 pm inclusive, Monday (1) to Friday (5).
- On a UTC server those are UTC hours. New York is UTC−4 in summer and UTC−5 in winter, so the team types “every hour between 13:00 and 21:00 on weekdays” and gets 0 13-21 * * 1-5.
- The next five runs listed under the expression are worked out in your device’s time zone, as if your computer were the server; they are not converted from UTC.
| What you type | Cron expression | Runs, by the machine’s clock |
|---|---|---|
| (menu: Every hour) | 0 * * * * | on the hour, 24 times a day |
| every hour at 15 minutes past | 15 * * * * | at :15 past every hour |
| every 2 hours | 0 */2 * * * | 12 am, 2 am … 10 pm, 12 times a day |
| every hour on weekdays | 0 * * * 1-5 | on the hour, Monday to Friday |
| every hour from 9am to 5pm on weekdays | 0 9-17 * * 1-5 | 9 am to 5 pm, Monday to Friday, 9 times a day |
| every hour between 13:00 and 21:00 on weekdays | 0 13-21 * * 1-5 | 13:00–21:00 UTC: 9 am–5 pm EDT, 8 am–4 pm EST |
| every 90 minutes | refused as one line | two lines offered: 0 */3 * * * and 30 1-23/3 * * * |
The team uses 0 13-21 * * 1-5. In 2026 daylight saving time runs from 8 March to 1 November: inside it the job runs 9 am to 5 pm New York time, outside it 8 am to 4 pm. Cron does not follow the change by itself, so either move the hours by one twice a year or run the job on a machine set to New York time.
How it works
- The expression is already there: 0 * * * *. The five fields under it are minute, hour, day of month, month and day of week, in that order.
- Copy it into your crontab, your CI schedule or your cloud scheduler. The same five fields mean the same thing in all of them.
- To change it, set the menu back to none and describe the schedule in your own words — "every 2 hours", "at 5pm on weekdays" — and it is built and read back to you.
- Check the reading, not the expression. What the page shows underneath comes from parsing what was built, so it is what a machine would do with it rather than what we meant.
Frequently asked questions
- Why not * * * * *?
- Because that is every minute, sixty times an hour. The hour field being * is what makes it "every hour"; the minute field being 0 is what stops it being every minute of every hour. It is the commonest cron mistake there is.
- Does it work in GitHub Actions, Kubernetes and the cloud schedulers?
- The five fields do. What differs is everything around them: some accept names like @daily, Kubernetes CronJobs take the same five, and GitHub Actions runs scheduled workflows late under load. Paste the expression, but do not assume the promptness.
- Can I read an expression I already have?
- Yes — the cron parser page does that. Paste an expression and it lists the dates it will next run and the values each field allows, which is the check worth doing before you trust one somebody else wrote.
- Which time zone does cron use?
- The clock of the machine that runs it. On a server set to UTC, 0 9 * * * runs at 9:00 UTC, which is 5 am in New York in summer. The plain hourly 0 * * * * lands on the hour wherever the zone is a whole number of hours from UTC, as in the US and the UK; in India (UTC+5:30) it fires at half past the local hour.
- How do I run a job every hour, but not on the hour?
- Set the menu to describe it and type “every hour at 15 minutes past” or “every hour at :15”: that gives 15 * * * *. A minute other than 0 keeps your job from starting at the same moment as everyone else’s hourly jobs.
- Can it run every 90 minutes?
- Not in one line: a step in the minute field starts again every hour, so */90 would run once an hour. Type “every 90 minutes” and the page says so and offers two lines that together run every 90 minutes: 0 */3 * * * and 30 1-23/3 * * *.
- Is anything sent anywhere?
- No. The expression is built and read back in your browser, and nothing is uploaded. It is free, with no account.