Cron Expression Explainer
Paste a 5-field cron expression or an @alias to read it as one sentence, a card per field and its next runs: 0 9 * * 1 runs at 9:00 AM on Monday. How it works
Use the Cron Expression Explainer
Five fields: minute, hour, day of month, month, day of week (or an alias such as @daily). Up to 200 characters; a seconds field is not supported.
Plain English
Runs at 9:00 AM on Monday.
Minute
Hour
Day of month
Month
Day of week
Next 5 runs
Calculating the next runs…
Times are worked out in your browser from this computer's clock, in the zone chosen above. A server that runs cron in another zone, or one that skips or repeats an hour when the clocks change, will fire at different moments.
About the Cron Expression Explainer
0 9 * * 1 runs at 9:00 AM every Monday: minute 0, hour 9, any day of the month, any month, day of week 1. The cron expression explainer reads a 5-field crontab line or an alias such as @daily, writes it as one sentence, shows each field on a card with its meaning and the values it allows, and lists the next 5 or 10 run times in your time zone or one of 13 others. A 6-field expression with seconds is refused.
What each field form means
| Field | Written | The card says |
|---|---|---|
| Minute | */15 | every 15 minutes |
| Minute | 5/10 | minutes 5, 15, 25, 35, 45 and 55 |
| Minute | 0,30 | minutes 0 and 30 |
| Minute | 10-40/5 | minutes 10, 15, 20, 25, 30, 35 and 40 |
| Hour | 9-17 | 9 AM through 5 PM |
| Hour | */6 | every 6 hours, starting at 12 AM |
| Hour | 22 | 10 PM |
| Day of month | 1,15 | days 1 and 15 of the month |
| Day of month | L | the last day of the month |
| Day of month | ? | every day of the month |
| Month | jan-mar | January through March |
| Month | */3 | January, April, July and October |
| Day of week | MON-FRI | Monday through Friday |
| Day of week | 7 | Sunday |
| Day of week | 5L | the last Friday of the month |
| Day of week | 5#2 | the 2nd Friday of the month |
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 or SUN to SAT (0 and 7 are Sunday). Names are three letters in any case. 5/10, L, 5L, 5#2 and ? are not in the cronie crontab(5) page, which allows a step only after * or a range (write 5-59/10 there), so check that your cron accepts them.
Mistakes the explainer refuses, and its message
| Expression | Message |
|---|---|
| 99 * * * * | Minute: 99 is outside 0 to 59. |
| 0 24 * * * | Hour: 24 is outside 0 to 23. |
| 0 0 * 13 * | Month: 13 is outside 1 to 12. |
| 0 0 * * 8 | Day of week: 8 is outside 0 to 7. |
| */0 * * * * | Minute: a step must be at least 1. |
| 0 17-9 * * * | Hour: the range 17-9 runs backwards. |
| 0 0 * * 1,,2 | Day of week: a list has an empty item (check for a doubled or trailing comma). |
| 0 0 * * MONDAY | Day of week: "MONDAY" is not a number or a three-letter name. |
| 0 9 * * | A crontab line has exactly 5 fields (minute hour day-of-month month day-of-week) but this has 4. |
| @every | @every is not a known alias. Known aliases: @yearly, @annually, @monthly, @weekly, @daily, @midnight, @hourly. |
Frequently asked questions
- How do I read a cron expression?
- Left to right, the five fields are minute, hour, day of month, month and day of week, and * means every value of its field. 30 9 * * MON-FRI is minute 30, hour 9, every day of the month, every month, Monday through Friday, which the explainer writes as “Runs at 9:30 AM on Monday through Friday.”
- Why does my cron job run on the 1st, the 15th and every Friday?
- Because both day fields are set. The cronie crontab(5) page says that when both are restricted, “the command will be run when either field matches the current time.” 0 0 1,15 * 5 reads “Runs at 12:00 AM on days 1 and 15 of the month, or on Friday.” To run only on a 1st or 15th that is a Friday, set one field to * and test the day inside the script.
- Is 7 Sunday in cron?
- Yes: 0 and 7 both mean Sunday, so 0 0 * * 7 reads “Runs at 12:00 AM on Sunday.” Names work too, as the first three letters in any case (sun, MON-FRI). A full name such as MONDAY is refused with a message.
- What do L, 5L and 5#2 mean in a cron expression?
- L in the day-of-month field is the last day of the month. In the day-of-week field 5L is the last Friday of the month and 5#2 the 2nd Friday. The explainer reads all three and ? (no restriction on that day field), but the cronie crontab(5) page describes none of them, so check that your cron accepts them. W (nearest weekday) is refused.
- Can it explain a cron expression with seconds?
- No. It reads the 5-field crontab form and the aliases @yearly, @annually, @monthly, @weekly, @daily, @midnight and @hourly. A sixth field is refused with the message that a seconds field is not supported, and @reboot is refused because it has no repeating schedule.
- How is the explainer different from the Crontab Translator?
- They share one parser, so the sentence is the same on both pages. Use the explainer to learn what each field of a line means: every field gets a card with the values it allows, eight example buttons load common schedules, and the next 5 or 10 runs can be shown in any of 13 named zones. The Crontab Translator gives the sentence and the next 5 runs without the field cards, and the Cron Job Generator builds a line one field at a time.
Related Tools
View all toolsCron Job Generator
Type the five cron fields or start from a preset: each box is checked as you type, then read back in plain English with the next 5 run times.
Crontab Translator
Translate a 5-field cron expression into plain English and see the next 5 run times: 0 9-17 * * 1-5 runs hourly from 9 AM to 5 PM, Monday to Friday.
JSON Validator & Auto-Repair
Check JSON for syntax errors and repair comments, single quotes, unquoted keys and trailing commas. Values stay as typed; errors show your line and column.
YAML Validator
Check YAML syntax as you type: line and column of the first error, a JSON view of each document, unknown tags such as !Ref listed, << merge keys optional.
JSON Path Query Tool
Test a JSONPath expression on your JSON and see the match count, each matching value and its path. Filters such as ?(@.price < 10) work. Up to 100 KB.
RegEx Playground
Try 11 regex presets, from email, phone and IPv4 to semver and hex color, on sample text, see every match, and read what each pattern does not check.