Cron Expression Explainer
Understand any cron schedule in plain English
*/15 9-17 * * MON-FRI into "Every 15
minutes, between 09:00 and 17:59, on Monday through Friday", breaks it
down field by field, and lists the next times it will run. It is the
quickest way to check a crontab entry, a CI schedule or a Kubernetes
CronJob before you deploy it.
What Is Cron?
Cron is the scheduler built into Linux and macOS, and its syntax has been adopted by GitHub Actions, GitLab CI, Kubernetes, cloud schedulers and many job libraries. Each schedule is a line of five fields separated by spaces. When the current time matches all five fields, the job runs.
The Five Fields
- Minute: 0 to 59
- Hour: 0 to 23, in 24-hour time
- Day of month: 1 to 31
- Month: 1 to 12, or JAN to DEC
- Day of week: 0 to 7, or SUN to SAT. Both 0 and 7 mean Sunday
Special Characters
*(any): Every value.*in the hour field means every hour,(list): Several values.0,30means minute 0 and minute 30-(range): A span.1-5in day of week means Monday to Friday/(step): Every nth value.*/10means every 10 minutes, and9-17/2means 9, 11, 13, 15 and 17- Macros:
@hourly,@daily,@weekly,@monthlyand@yearlyare shortcuts, and@rebootruns once at startup
How to Use the Explainer
Step 1: Enter an Expression
Type or paste your cron expression, or click one of the examples. The plain-English summary updates as you type.
Step 2: Check Each Field
The Field by field table shows what every part means and expands
ranges and steps into the actual values, so you can see that
*/15 means minutes 0, 15, 30 and 45.
Step 3: Review the Next Runs
The Next runs list shows upcoming run times with how far away each one is. Switch between local time and UTC, since most servers and CI systems run cron in UTC. Show 5, 10 or 20 runs.
Step 4: Share It
The page address updates with your expression, so you can copy the link into a pull request or chat and others will see the same explanation.
Common Cron Schedules
* * * * *: every minute*/5 * * * *: every 5 minutes0 * * * *: at the start of every hour0 0 * * *: every day at midnight30 9 * * 1-5: weekdays at 09:300 0 * * 0: every Sunday at midnight0 0 1 * *: the first day of every month0 0 1 1,4,7,10 *: the first day of each quarter
The Day-of-Week Gotcha
When both day of month and day of week are restricted, cron runs the
job when either one matches, not both. So
0 0 1 * 1 runs on the 1st of every month
and on every Monday. The explainer says "or" in these cases
so the surprise doesn't reach production. If one of the two fields
starts with *, as in */2, both must match
instead.
Other Things to Watch For
- Time zones: Cron uses the server's time zone, which is often UTC. Compare both views before you rely on a time
- Daylight saving: A time that doesn't exist on the day the clocks go forward is skipped in the list. Most cron daemons run those jobs right after the change
- Impossible dates:
0 0 30 2 *never runs. The explainer tells you when a schedule has no runs in the next 5 years - Seconds fields: Quartz and Spring add a seconds field and characters like
?,Land#. This tool follows standard 5-field cron and points out when an expression uses the other format
Privacy
Everything is calculated in your browser. Your schedules are not sent anywhere, except in the page address if you choose to share it.
Conclusion
A plain-English summary, a field breakdown and real next run times take the guesswork out of cron. Check your next schedule at tools.typinks.com/cron-explainer.