How to use it
- Type or paste a cron expression, or pick one of the common schedules.
- Read the plain-English meaning. Invalid fields are named with the reason.
- Check the next 10 run times, shown in your local time zone. Switch to UTC if your server runs in UTC.
- Copy the run times to share them, or adjust the expression until the schedule is what you need.
How it works
A standard cron expression, as used by crontab on Linux (Vixie cron and cronie) and many CI and hosting schedulers, has five fields separated by spaces: minute (0–59), hour (0–23), day of month (1–31), month (1–12 or JAN–DEC) and day of week (0–7 or SUN–SAT, where both 0 and 7 mean Sunday). Each field accepts * for every value, a single value, a range such as 1-5, a list such as 1,15,30, and a step such as */15 (every 15th value) or 9-17/2 (every second hour from 9 to 17). Names are case-insensitive. The shortcuts @yearly (or @annually), @monthly, @weekly, @daily (or @midnight) and @hourly stand for 0 0 1 1 *, 0 0 1 * *, 0 0 * * 0, 0 0 * * * and 0 * * * *.
The day-of-month and day-of-week fields follow a rule that surprises many people. If either field starts with *, a day must satisfy both fields. If both fields are restricted, a day matches when either one does: 0 0 13 * 5 runs on the 13th of every month and also on every Friday, not only on Friday the 13th. Because the test is whether the field starts with *, a step such as */2 also counts as unrestricted. This matches Vixie cron and cronie; a few other schedulers behave differently.
Next run times are calculated in your browser's time zone, or in UTC, which is what most servers and cloud schedulers use. Cron itself uses the time zone of the machine it runs on. Around daylight-saving changes real cron daemons differ; this tool leaves out local times that do not exist when clocks go forward and lists a repeated hour once. Extended syntaxes are not supported: six- or seven-field Quartz expressions with seconds or years, and the special characters ?, L, W and #.
Examples
Office-hours health check
*/15 9-17 * * 1-5 means every 15 minutes between 09:00 and 17:59, Monday through Friday. The last run each day is at 17:45.
Nightly backup
30 2 * * * runs at 02:30 every day. If the server uses UTC and you are in New York, the next-runs list in UTC mode shows the times the server will actually use.
The day-field trap
0 9 1 * 1 looks like “9:00 on the first of the month if it is a Monday”, but it runs at 09:00 on the 1st of every month and also every Monday. To run only on the first Monday, schedule 0 9 1-7 * * and check the weekday inside the script.
Frequently asked questions
What does */5 mean in cron?
It means every fifth value of the field, starting at the lowest value. In the minute field, */5 runs at minutes 0, 5, 10 … 55. In the hour field, */5 runs at 0, 5, 10, 15 and 20, so the gap from 20:00 to midnight is four hours, not five.
Why does my job run on more days than I expected?
When both the day-of-month and day-of-week fields are restricted, cron runs on days that match either of them. For example, 0 0 15 * 1 runs on the 15th and on every Monday. Set one of the two fields to * to require only the other.
Which time zone does cron use?
The system time zone of the server running the cron daemon, unless the crontab sets CRON_TZ or TZ (supported by cronie). Cloud schedulers often default to UTC. Use the UTC switch to see the times a UTC server would use.
Can I use seconds or a year field?
Not in standard cron, which has a one-minute resolution and five fields. Six- and seven-field formats with seconds and years belong to Quartz, Spring and similar libraries and are not supported by this tool.
Is 0 or 7 Sunday?
Both. In the day-of-week field 0 and 7 both mean Sunday, 1 is Monday and 6 is Saturday. You can also write the three-letter names SUN to SAT.
Privacy
The expression is parsed and the run times are calculated in your browser. Nothing you enter is uploaded, stored or included in analytics.