Cron Expression Generator
Build a crontab schedule from plain-English choices, or paste any cron expression to validate it, read it back in English, and preview the next run times.
Standard 5-field Unix cron. Runs entirely in your browser — nothing is uploaded.
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 five-field string that schedules recurring tasks on Unix systems. The fields set the minute, hour, day of month, month, and day of week, separated by spaces, and the job runs whenever the current time matches all five. For example, 0 9 * * 1-5 runs at 9:00 AM Monday through Friday. This generator builds the expression from plain-English choices and reads any expression back in plain English.
Cron is the scheduler behind Linux crontabs, CI pipelines, and most application frameworks, so the tool works in both directions: build a schedule with the frequency tabs, or paste an existing expression to check it 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.
Related tools
- Unix Timestamp Converter — turn epoch seconds into readable dates
- cURL to Fetch Converter — rewrite curl commands for JavaScript
- JSON Formatter — format and validate job config or payloads
- Diff Checker — compare two crontab files line by line
- htpasswd Generator — create credentials for scheduled endpoints
- UI component gallery — Tailwind and shadcn/ui blocks for your dashboards
Last verified 12 August 2026 · Runs entirely in your browser; expressions are never sent to a server.
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.