Cron Expression Explainer: Turn a Crontab Line into Plain English
See when a cron expression runs as a plain-English sentence, a field-by-field breakdown and a list of upcoming run times
Your data stays with you. Conversion happens inside the browser; nothing is sent to a server.
Did this tool do the job?
Thanks, your feedback came through.
How it works
Cron is the scheduler that starts a job on a server at set times; the "Cron Jobs" screen in a hosting panel such as cPanel or Plesk asks for the same expression, and so does the schedule line of a GitHub Actions workflow. A standard expression has five fields: minute, hour, day of month, month and day of week. Paste an expression you wrote or copied from a tutorial into the left panel and the right panel tells you, in a sentence, when it runs. For example "*/15 9-17 * * 1-5" reads "Every 15 minutes, between 09:00 and 17:59, Monday through Friday", followed by the first upcoming runs (13:15, 13:30 …). A command at the end of the line (such as /home/user/backup.sh) is shown separately; comment lines starting with # and settings such as MAILTO= are skipped, so you can paste the whole output of crontab -l. Upcoming times use your device clock. Many servers run on UTC, so if you are in New York (UTC−5, UTC−4 in summer) a job written as "0 9 * * *" on a UTC server fires at 4 or 5 in the morning your time.
This tool is also known as cron expression generator, crontab generator, cron expression explained, crontab every 5 minutes, quartz cron expression, spring cron expression.
What is Cron?
Cron is the background service on Linux and Unix servers that starts a job at a pre-set minute without anyone pressing a button. It handles repeating chores such as taking backups, flushing an email queue or building a website's daily report. The "Cron Jobs" screen in a hosting control panel is simply a form that adds lines to this service.
What is Crontab?
A crontab (cron table) is the text file that holds one user's scheduled jobs; you edit it with crontab -e and list it with crontab -l. Each line has five time fields followed by the command to run. Lines starting with # are comments, and lines such as MAILTO= hold settings like who receives the job's output by email.
What is the difference between Linux cron and Quartz cron?
Linux cron has five fields and works to the minute; Quartz (and Spring in Java) adds a seconds field at the front, so schedules such as "every 10 seconds" are possible. Quartz also knows an optional year field, L for the last day of the month, W for the nearest weekday and # for "the 2nd Monday of the month". The difference that causes most mistakes is weekday numbering: in Quartz 1 is Sunday, in Linux 1 is Monday.
Day of month plus day of week: cron's OR rule
Most people read "0 0 1,15 * 1" as "the 1st and 15th, if they fall on a Monday". Linux cron does not work that way: when both the day-of-month and the day-of-week fields are restricted, the job runs when either one matches. That line runs at midnight on the 1st, on the 15th and on every Monday. The explainer writes "or" in the sentence and adds a note underneath.
There is one more twist: if a field starts with an asterisk (such as "*/2"), cron treats it as unrestricted and then requires both fields to match. So "0 0 */2 * 1" means "odd-numbered days that are also Mondays". Several JavaScript libraries skip this detail; this page follows the cron daemon actually installed on Linux (cronie, Vixie cron). Spring does the opposite: both fields must always match.
Linux, Spring or Quartz: which dialect are you using?
The Cron Jobs screen of your hosting panel, the crontab file on a Linux server, Kubernetes CronJobs and GitHub Actions all use the five-field Linux dialect. In Java, Spring's @Scheduled expression adds a seconds field at the front and needs six fields. Quartz also starts with seconds, accepts an optional seventh year field, insists that either the day of month or the day of week is "?", and numbers weekdays from 1: in Quartz 1 is Sunday and 2 is Monday, while in Linux and Spring 1 is Monday.
Automatic detection looks at the field count and the symbols: "?", "L", "W" or "#" means Quartz, six fields means Spring, five means Linux. The chosen dialect is printed in the output. Because the last word of a six-word Linux line may be a command ("0 5 * * * backup.sh"), pick the dialect by hand when unsure; in a Quartz expression, a weekday number read in the wrong dialect shifts by one day.
Common cron expressions
These lines cover the schedules people search for most; copy one into the left panel to see its upcoming run times, then adjust it to your own hours.
- */5 * * * * — every 5 minutes
- 0 * * * * — every hour, on the hour
- 0 3 * * * — every night at 03:00
- 30 8 * * 1-5 — every weekday at 08:30
- 0 9 * * 1 — every Monday at 09:00
- 0 0 1 * * — midnight on the 1st of every month (@monthly)
- 0 0 1 1 * — midnight on 1 January every year (@yearly)
Frequently asked questions
How do you read a cron expression?
From left to right there are five fields: minute (0-59), hour (0-23), day of month (1-31), month (1-12) and day of week (0-7, where both 0 and 7 are Sunday). An asterisk means "every value", a comma makes a list (1,15), a hyphen a range (9-17) and a slash a step (*/15 = every 15). "30 2 * * *" means every day at 02:30.
How do I write a cron job that runs every 5 minutes?
Use "*/5 * * * *". The */5 in the minute field fires at minutes 0, 5, 10 … 55. To limit it to working hours, restrict the hour field as well: "*/5 9-18 * * *".
Why doesn't my cron job run at the time I set?
The usual cause is the time zone: if the server runs on UTC, "0 9 * * *" fires at 09:00 UTC, not 09:00 where you live. Check the server clock with the date command or shift the expression by the difference. The second most common cause is setting both day of month and day of week; cron runs when either one matches.
What do @daily and @reboot mean in a crontab?
@daily (or @midnight) is the same as "0 0 * * *": every day at midnight. @hourly, @weekly, @monthly and @yearly are similar shortcuts. @reboot is not tied to the calendar: it runs once each time the server or the cron service starts, so no next run time can be calculated.