Cron Job Expression Translator
Paste any 5-part crontab string and instantly decode it into plain English, with a color-coded field breakdown and the next 3 scheduled run times.
- Awaiting valid expression...
crontab -e and list it with crontab -l.timedatectl before scheduling time-sensitive jobs.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:
- Minute: 0 to 59
- Hour: 0 to 23 (midnight is 0, noon is 12)
- Day of Month: 1 to 31
- Month: 1 (January) to 12 (December)
- Day of Week: 0 to 7 (both 0 and 7 mean Sunday; 1 is Monday)
Operators at a Glance
- * (asterisk) - matches every valid value in the field
- - (range) - selects all values between two numbers, inclusive: 9-17 means 9, 10, 11... 17
- , (list) - selects specific discrete values: 1,15 means just the 1st and 15th
- / (step) - selects every Nth value: */10 in minutes means 0, 10, 20, 30, 40, 50
Common Patterns You Will Encounter
*/15 * * * *- every 15 minutes, all day, every day0 0 * * *- exactly once per day at midnight0 9-17 * * 1-5- top of every hour from 9am to 5pm, Monday through Friday0 0 1,15 * *- midnight on the 1st and 15th of every month30 23 * * 0- 11:30pm every Sunday0 6 * 1-3 1-5- 6am on weekdays in January, February, and March
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
sleep 30; /path/to/script.sh appended to a second cron line.@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.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.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.