Crontab Expression Visualizer
Build cron expressions with interactive toggles and see a plain-English description of when the job runs. Preview the next 10 execution times.
* * * * *Build a cron schedule without memorising the syntax
You need to schedule a backup script to run every night at 2am, but you keep forgetting whether the hour field comes before or after the minute field. This tool lets you click through each of the five fields β minute, hour, day of month, month, and day of week β and see the cron expression build itself in real time at the top of the page.
Step 1: Set the minute
The first field controls which minute of each hour the job runs. Choose "Every" to run at all minutes, "Specific" to pick a single minute (like 0 for the top of the hour), "Range" to run between two minutes (like 0-15 for the first quarter of each hour), or "Every N" to run every N minutes (like every 5 minutes). For a daily 2am backup, set this to 0.
Step 2: Set the hour
The second field controls which hour the job runs. Use "Specific" to pick a single hour (like 2 for 2am), or "Range" for a window (like 9-17 for business hours). For the nightly backup, set this to 2.
Step 3: Set day, month, and day of week
Leave day of month and month as "Every" to run on all days and months. Set day of week to "Every" for daily, or "Range" 1-5 for weekdays only. If you set both day of month and day of week to specific values, most cron implementations run the job if either condition matches β not only when both match.
Step 4: Copy or use a preset
The plain-English banner below the expression shows what your schedule means in human language. Check the "Next 5 scheduled runs" panel to see the real dates and times the job will fire. Click "Copy" to grab the expression, or click one of the common presets β "Every weekday at 9am", "Daily midnight", "Every 15 minutes" β to load a ready-made schedule.
How cron scheduling works under the hood
The five-field cron format
A standard cron expression has five space-separated fields. The first is minute (0-59), the second is hour (0-23), the third is day of month (1-31), the fourth is month (1-12), and the fifth is day of week (0-6, where 0 is Sunday). Each field supports four operators: * means any value, a comma separates specific values (1,3,5), a dash defines a range (9-17), and a slash sets a step (*/5 means every 5 units). The cron daemon checks each field left to right and only fires the job when all five fields match the current time.
How the visualizer builds your expression
When you select a mode and value for each field, the tool generates the corresponding token. "Every" produces an asterisk. "Specific" outputs the number you chose. "Range" outputs start-end. "Every N" outputs */N. The five tokens are joined with spaces to form a valid cron expression. For example, setting minute to 0, hour to 2, day of month to every, month to every, and day of week to every produces 0 2 * * *. The plain-English description is built by mapping each field's mode and value to a natural-language phrase like "at 2:00am" or "every Monday through Friday".
How the next-runs preview works
The preview engine starts at the current time plus one minute and checks each subsequent minute against your five fields. It tests up to 200,000 minutes ahead (about 138 days) to find the next five matching timestamps. For each candidate minute, it parses each field independently: an asterisk always matches, */N checks if the value modulo N equals zero, a range checks if the value falls within the bounds, and a list splits on commas and tests inclusion. The day-of-month and day-of-week OR logic is applied so that setting both to specific values triggers on either match.
The day-of-month and day-of-week OR trap
This catches almost everyone at least once. If you set day of month to 15 and day of week to 1 (Monday), the job runs on the 15th of every month AND on every Monday β not only when the 15th falls on a Monday. Most cron implementations use OR logic when both fields are non-wildcard. To run only on the 15th when it is a Monday, you would need to use a different approach such as a wrapper script that checks the day of week before executing.
What the common presets do
The preset buttons load well-known schedules. "Every weekday at 9am" sets 0 9 * * 1-5 β minute 0, hour 9, any day of month, any month, Monday through Friday. "Daily midnight" sets 0 0 * * *. "Every 15 minutes" sets */15 * * * *. These presets are a quick starting point you can adjust from rather than building every schedule from scratch.
Frequently asked questions
What is a cron job?
A cron job is a scheduled task on Unix-like systems managed by the cron daemon. It runs a command or script automatically at a defined time interval β every night at midnight, every Monday at 9am, or every five minutes. Cron handles backups, report generation, data syncing, cache clearing, and other recurring automation.
What does * * * * * mean?
Five asterisks match every value in every field, so the job runs every minute of every hour of every day. It is the most permissive schedule possible and is rarely used in production. The tool starts with this as a blank slate so you can build from any field.
How do I run a job every 5 minutes?
Set the minute field to Every N with N=5, and leave the other four fields as Every. The resulting expression is */5 * * * *. The slash is a step operator β */5 means starting at 0, every 5 minutes. This produces runs at :00, :05, :10, :15, and so on.
How do I run a job at 9am on weekdays only?
Set minute to 0, hour to 9, day of month to Every, month to Every, and day of week to Range 1-5. The resulting expression is 0 9 * * 1-5. Monday is 1, Friday is 5. The * in day of month and month means those fields match any value.
What is the difference between day-of-month and day-of-week?
Day-of-month (third field) matches calendar dates like the 1st or 15th. Day-of-week (fifth field) matches named days like Monday or Friday. When both are set to non-wildcard values, most cron implementations run the job if either condition matches β not only when both match. This OR logic catches people off guard. Use * in one field to avoid ambiguity.
Can cron run more frequently than once a minute?
Standard cron has one-minute resolution. For sub-minute intervals you need a different approach: a loop inside a script, a systemd timer with a finer interval, or a task queue like Celery or Bull. Some cloud schedulers like AWS EventBridge also support sub-minute scheduling.
Does this tool support @reboot or @daily shorthand?
No β this tool generates standard five-field expressions only. The shorthand syntax (@reboot, @yearly, @monthly, @weekly, @daily, @hourly) is a convenience supported by some cron implementations but not universally. You can type those shorthands directly into crontab, but this tool outputs the expanded numeric form so you can see exactly what each field does.
Why does day 31 never run in February?
Cron does not validate day-of-month values against the actual month length. If you schedule a job for day 31, it never runs in February, April, June, September, or November because those months have fewer than 31 days. The next-runs preview in this tool correctly skips non-matching dates so you can see this behaviour before deploying.
How accurate are the next five runs?
The preview iterates forward minute-by-minute from the current time and tests each candidate against your five fields. It finds the next five matching timestamps and displays them in your browser's locale. The times reflect your local timezone. If you deploy the cron job on a server in a different timezone, the actual run times will differ.