Cron expression explainer
Paste a cron expression like */15 9-17 * * MON-FRI to read it in plain English, check each field for mistakes and see the next run times in any time zone.
- Runs in your browser
- Nothing is uploaded
- Free, no sign-up
What it means
Every 15 minutes from 09:00 to 17:45, Monday to Friday.
Field by field
- */15Minuteevery 15 minutes0, 15, 30, 45
- 9-17Hourhours 9 to 179, 10, 11, 12, 13, 14, 15, 16, 17
- *Day of monthevery day
- *Monthevery month
- MON-FRIDay of weekMonday to FridayMON, TUE, WED, THU, FRI
Next 10 runs
Servers, Kubernetes and GitHub Actions usually run cron in UTC. Pick the zone of the machine that runs it.
Working out the run times…
How it works
Type or paste a cron expression and the page reads it as cron would: a sentence saying when it runs, what each of the five fields matches, and the next ten run times. Mistakes are pointed out field by field, along with schedules that are valid but surprising, like a day that some months don't have.
Pick the time zone of the machine that runs the job to see the run times there, next to your own time and UTC. Around daylight saving changes the times follow cronie, the cron most Linux systems run. You can also paste a whole crontab line: the command at the end is set aside, and shortcuts like @daily and a CRON_TZ= prefix are understood.
A cron expression is five fields separated by spaces:
| Field | Allowed values |
|---|---|
| Minute | 0 to 59 |
| Hour | 0 to 23 |
| Day of month | 1 to 31 |
| Month | 1 to 12, or JAN to DEC |
| Day of week | 0 to 7 (0 and 7 are Sunday), or SUN to SAT |
In each field, * means every value, 1-5 is a range, 1,15 is a list, and */10 is a step: every tenth value from the start of the field. A step can follow a range too, as in 9-17/2.
Common schedules
| Expression | Runs |
|---|---|
| * * * * * | Every minute. |
| */5 * * * * | Every 5 minutes. |
| */15 * * * * | Every 15 minutes. |
| 0 * * * * | Every hour, on the hour. |
| 0 */6 * * * | At 00:00, 06:00, 12:00 and 18:00, every day. |
| 0 0 * * * | At 00:00, every day. |
| 0 9 * * 1-5 | At 09:00, Monday to Friday. |
| 0 0 * * 0 | At 00:00, on Sundays. |
| 0 0 1 * * | At 00:00, on the 1st of the month. |
| 0 0 1 1 * | At 00:00, on 1 January. |
Questions
What does * * * * * mean in cron?
Every minute. The five fields are minute, hour, day of month, month and day of week, and a * means every value of its field, so a job with five stars runs once a minute, every day.
How do I run a cron job every 5 minutes?
Use */5 * * * *. The /5 is a step, so the minute field matches 0, 5, 10 and so on up to 55. Every 15 minutes is */15 * * * *, and every hour on the hour is 0 * * * *. A step that doesn't divide 60, like */7, starts again at the top of each hour, so the last gap is shorter.
Which time zone does cron use?
The time zone of the machine or service that runs it. Linux servers, Kubernetes and GitHub Actions usually run cron in UTC. cronie and many cron libraries also accept CRON_TZ= before the schedule to pick a zone. Choose the zone above the run times on this page to see them there and in your own time.
What happens if I set both the day of month and the day of week?
Cron runs on days that match either one. 0 0 1 * MON runs at midnight on the 1st of every month and on every Monday, not only on Mondays that fall on the 1st. If one of the two fields starts with *, as in */2, Vixie cron and cronie run only on days that match both.
Limits
This page reads the standard five-field form used by crontab, Kubernetes, GitHub Actions and most schedulers. The six and seven-field forms of Quartz, Spring and AWS EventBridge, with seconds or years and the ?, L, W and # characters, aren't read yet; the page says so when it sees them.
Cron programs differ in a few corners, and this page follows Vixie cron and cronie where they do: how day of month and day of week combine, a step written without a range like 5/15, and what happens when the clocks change. Your scheduler may differ, so the page notes each of these when your expression uses them. Run times assume the machine is on and cron is running; a job missed while it was off doesn't run later unless something like anacron runs it.
The schedule and time zone are kept after the # in the page address, so you can bookmark or share them. That part of an address is never sent to a server. A command pasted with the schedule is left out of the link.
Privacy
This tool runs entirely in your browser. The files you open and what you type are never sent to a server, and nothing is stored after you close the page. See the privacy page.
Related tools
JWT decoder
Paste a JSON Web Token to read its header and claims, see when it expires and check its signature. The token never leaves your browser.
Unix timestamp converter
Turn a Unix timestamp into a date in your time zone, UTC and ISO 8601, or a date into a timestamp. Reads seconds or milliseconds, and makes Discord codes.
QR code generator
Make a static QR code for a link or text. It never expires, has no tracking redirect, and downloads as PNG or SVG.