Cron Expression Generator
Build a crontab schedule visually, or paste any cron expression to validate it, translate it into plain English, and preview the next run times. A free, two-way cron generator, validator, and explainer for standard 5-field Unix cron — pick a frequency, fine-tune the fields, and copy.
Run every
Every hour, at minute
Every day at
On these days
At
On day of month
At
In
On day
At
Edit each field
Fix the expression above to see its description and next runs.
Next runs
No upcoming runs within the next ~4 years.
Shown in your local time zone (). Cron on a server uses the server's time zone — often UTC.
Fields (in order)
- minute
- 0–59
- hour
- 0–23
- day of month
- 1–31
- month
- 1–12 or JAN–DEC
- day of week
- 0–7 or SUN–SAT (0/7 = Sun)
Special characters
- *
- Every value
- ,
- List — 1,15,30
- -
- Range — 1-5
- /
- Step — */15
Macros
- @hourly
- 0 * * * *
- @daily
- 0 0 * * *
- @weekly
- 0 0 * * 0
- @monthly
- 0 0 1 * *
- @yearly
- 0 0 1 1 *
- @reboot
- At startup
Good to know
- day-of-month + day-of-week
- When both are set, cron runs on either (OR)
- Time zone
- Server-local; clouds often use UTC
- Minimum interval
- Once per minute
What is a cron expression?
A cron expression is a compact string that tells the Unix cron scheduler when to run a recurring job. It has five fields separated by spaces — minute hour day-of-month month day-of-week — and the job runs whenever the current time matches all of them. For example, 0 9 * * 1-5 means "at 9:00 AM, Monday through Friday." Cron is the backbone of scheduled tasks on Linux servers, in CI pipelines, and in many app frameworks, so getting the expression right matters.
This free cron expression generator works both ways: build a schedule with the frequency tabs, or paste an existing expression to read it back in plain English and see exactly when it will fire next.
How to use this generator
Pick a frequency tab — Minutes, Hourly, Daily, Weekly, Monthly, Yearly, or Advanced — and set the inputs; the cron expression updates live. Or type/paste directly into the big expression field and watch the plain-English description and the next run times update beneath it. Invalid expressions are flagged inline so you can fix them before deploying. When it reads the way you want, hit Copy. Use the presets for the most common schedules.
Cron syntax: fields and special characters
Each field accepts more than a single number:
*— every value (e.g. every minute, every day).,— a list:0,15,30,45means those four minutes.-— a range:1-5in day-of-week is Monday through Friday./— a step:*/15means every 15, and0-30/10means 0, 10, 20, 30.- Names — months accept
JAN–DECand weekdays acceptSUN–SAT.
There are also shortcut macros: @hourly, @daily, @weekly, @monthly, @yearly, and @reboot (which runs once at startup).
Common cron expression examples
* * * * *— every minute*/5 * * * *— every 5 minutes0 * * * *— every hour, on the hour0 0 * * *— every day at midnight30 8 * * 1-5— 8:30 AM on weekdays0 0 * * 0— every Sunday at midnight0 0 1 * *— the 1st of every month at midnight0 0 1 1 *— once a year, January 1st
Cron gotchas & limitations
A few things trip people up. The biggest is the day-of-month / day-of-week rule: when you set both day fields (neither is *), cron runs the job when either matches — not both — so 0 0 13 * 5 fires on the 13th and every Friday. Time zones are another: cron uses the server's local time, while GitHub Actions, AWS, and Vercel default to UTC — the next-run times here use your browser's zone, so always confirm the server's. Cron also can't go sub-minute (one minute is the floor) and can't express things like "every other week" or "the last weekday of the month" directly. For seconds-level precision or those calendar rules, reach for Quartz/6-field cron, systemd timers, or your framework's scheduler.
Cron isn't identical on every platform. Standard Unix/Linux crontab — and this tool — uses five fields. Quartz (Java/Spring) and AWS EventBridge use a six- or seven-field format that adds a seconds field and a year, plus special characters like ?, L, W, and # — and Quartz/AWS require a ? in either the day-of-month or day-of-week field. Schedulers such as node-cron make the seconds field optional. When you copy an expression from here, confirm whether your scheduler expects 5-field Unix syntax or a 6-field Quartz-style format.
Need to style the UI around your scheduled dashboards? Try our other free tools — the CSS Flexbox and CSS Grid generators for layout, and the CSS Box Shadow Generator for depth.
Frequently asked questions
0 9 * * 1-5 means 9:00 AM on weekdays. Each field accepts specific values, ranges (1-5), lists (1,3,5), steps (*/15), and * for "every".
*/5 in the minute field means "every 5 minutes" (0, 5, 10, … 55). You can combine it with a range, e.g. 0-30/10 means minutes 0, 10, 20, and 30. So */5 * * * * runs every five minutes.
*), cron runs the job when either one matches, not both. For example, 0 0 1 * 1 runs at midnight on the 1st of the month and on every Monday. Leave one of the two day fields as * to avoid surprises.
@hourly = 0 * * * *, @daily/@midnight = 0 0 * * *, @weekly = 0 0 * * 0, @monthly = 0 0 1 * *, and @yearly/@annually = 0 0 1 1 *. @reboot runs once when the system starts up — there's no fixed time, so a "next run" can't be calculated.
? (no specific value), L (last), W (nearest weekday), and # (nth weekday). This generator targets standard 5-field Unix cron.