Visual Dissection
Minute
-
-
Hour
-
-
Day / Month
-
-
Month
-
-
Day / Week
-
-
Plain-English Translation
Awaiting a valid 5-part cron expression...
Next 3 Scheduled Runs (your local time)
  • Awaiting valid expression...
Key Terms Explained
Cron
A time-based job scheduler built into Unix-like operating systems. The name comes from Chronos, the Greek personification of time. Cron runs in the background and fires scheduled commands at the times you specify.
Crontab
Short for "cron table." A plain-text config file where each line defines one scheduled job using a 5-field expression followed by the command to run. Edit yours with crontab -e and list it with crontab -l.
Asterisk (*)
The wildcard operator. An asterisk in any field means "every valid value for this field." For example, * in the Hour field means every hour from 0 through 23. It is the broadest possible selector for a field.
Step Value (/)
The step (or increment) operator. Written as */N or start-end/N, it means "every Nth unit." So */15 in the Minute field fires at minutes 0, 15, 30, and 45. Combined with a range, 10-50/10 fires at 10, 20, 30, 40, and 50.
Range (-)
The range operator connects two values with a hyphen to select everything between them, inclusive. For example, 1-5 in the Day-of-Week field means Monday through Friday, and 9-17 in the Hour field means every hour from 9am to 5pm.
List (,)
The list operator lets you specify multiple discrete values in one field, separated by commas. For example, 1,15 in the Day-of-Month field means the job runs on the 1st and 15th of each month. You can mix lists with ranges: 1,10-12.
UTC Time vs Local Time
By default, cron uses the system clock, which on most servers is set to UTC (Coordinated Universal Time). If your server is in UTC and you write 0 9 * * *, the job fires at 9am UTC - which may be a very different local hour for your users. Always check your server's timezone with timedatectl before scheduling time-sensitive jobs.
Daemon
A background process that runs continuously without direct user interaction. The cron daemon (called crond or cron depending on the distro) is the invisible engine that reads your crontab, watches the clock, and executes your jobs at the right moment. It starts automatically on boot.

The Complete Guide to Reading Cron Expressions

Cron expressions look cryptic at first glance - five columns of numbers, asterisks, slashes, and commas with no labels. This guide demystifies each field, explains every operator, and shows you how to read even the most complex schedules at a glance.

How to Use This Translator

Paste your cron expression directly into the monospace input at the top. The tool listens for every keystroke and updates all three output panels instantly - no button to press. The Visual Dissection Board breaks your expression into its five color-coded fields so you can verify each one independently. The Plain-English Translation assembles the full human-readable sentence. The Next 3 Runs panel calculates the upcoming fire times in your browser's local timezone, so the times shown are what you would actually experience on a server with the same timezone setting.

The 5-Field Structure

Every standard crontab line reads left to right: minute hour day-of-month month day-of-week. The ranges for each field are:

Operators at a Glance

Common Patterns You Will Encounter

A Note on Timezones

This translator shows upcoming run times in your browser's local timezone. Production cron daemons typically run in the server's timezone, which on cloud VMs is almost always UTC. If your expression is meant for a UTC server and you are in a different timezone, mentally adjust the "Next 3 Runs" panel accordingly. The Visual Dissection and Plain-English panels are timezone-agnostic - they describe the schedule in abstract terms regardless of where the clock is anchored.

Frequently Asked Questions

Does cron syntax support seconds?
Standard Unix crontab does not support a seconds field. The classic cron expression has exactly five fields: minute (0-59), hour (0-23), day of month (1-31), month (1-12), and day of week (0-7). The minimum granularity in native cron is one minute. Some extended schedulers - such as the Quartz scheduler for Java, Spring's @Scheduled annotation, AWS EventBridge, and certain cloud-native platforms - add a sixth field for seconds at the far left. If you need sub-minute precision in a Unix environment, a common workaround is to chain multiple cron entries offset by a set number of seconds using the sleep command, for example: run the script once normally and again 30 seconds later with sleep 30; /path/to/script.sh appended to a second cron line.
What happens if a server restarts during a scheduled cron time?
If a server reboots exactly when a cron job was supposed to run, that execution is simply missed. Cron does not queue up or replay skipped jobs after the system comes back online. The cron daemon only fires jobs at the moment they are due - if it was not running, nothing fires. To handle this case, many teams use the @reboot special string in crontab, which runs a job once immediately after every system reboot. For critical tasks that must never be skipped, a more robust solution is to use a distributed job scheduler such as Airflow, Celery Beat, or a cloud-managed cron service that stores job state in a database and can detect and replay missed runs.
How do I run a script on the last day of the month?
Standard cron does not have a built-in last-day-of-month operator. The most reliable workaround is to run your script every day during the window and add a shell check at the top: if [ $(date -d tomorrow +%d) -eq 01 ]; then exit 0; fi. This checks whether tomorrow is the 1st of the next month (meaning today is the last day) and exits early if it is not. Your cron entry would be something like 0 23 28-31 * * /path/to/check-and-run.sh. Some distributions ship Vixie cron or fcron which support an L operator in the day-of-month field, but this is not part of the POSIX standard and is not portable across systems.
What is the difference between Day of Month and Day of Week?
Day of Month (field 3) specifies a numbered date in the calendar month, from 1 to 31. Day of Week (field 5) specifies a named weekday, where 0 and 7 both mean Sunday, 1 is Monday, through 6 for Saturday. The critical subtlety is how cron behaves when both fields are restricted simultaneously: if you set a specific day of month AND a specific day of week, most cron implementations treat this as a union rather than an intersection. For example, 0 9 1 * 1 runs at 9am on every 1st of the month AND on every Monday - not only on Mondays that fall on the 1st. If you want the intersection (only Mondays that are also the 1st), you need a shell conditional inside the script rather than relying on cron alone.