Cron Job Generator
Build cron expressions visually with field-by-field controls. Select every, every-N, range, or specific values for minute, hour, day, month, and weekday. Get human-readable descriptions and next 10 run times. Free online cron job generator.
- Runs in your browser
- Your data never leaves your browser
- Free · No Sign-Up
Scan with WeChat to share this tool
Examples, details and FAQ Worked examples, how it compares with other tools, and answers to common questions.
Examples
The descriptions and run times below are the tool’s own output, computed from 2026-10-01 10:00 UTC with the UTC switch on. To explain an expression you already have, paste it into the box above or into the Cron Expression Parser.
| Expression | Description | Next runs |
|---|---|---|
0 9 * * 1-5 | At 9:00, on Monday through Friday | 2026-10-02 09:00 UTC, 2026-10-05 09:00 UTC, 2026-10-06 09:00 UTC |
0 0 1,15 * 1 | At midnight, on day 1, 15 of the month or on Monday | 2026-10-05 00:00 UTC, 2026-10-12 00:00 UTC, 2026-10-15 00:00 UTC, 2026-10-19 00:00 UTC |
0 0 */2 * 1 | At midnight, on every 2 days of the month and on Monday | 2026-10-05 00:00 UTC, 2026-10-19 00:00 UTC, 2026-11-09 00:00 UTC |
The second and third rows show the rule that surprises most people. When both the day-of-month and the weekday field are restricted, cron runs the job on days that match either field, so 0 0 1,15 * 1 fires on the 1st, the 15th and every Monday. But a field that starts with *, including a step such as */2, does not count as a restriction, so in the third row both fields must match: only Mondays that fall on an odd date (*/2 in the day field is 1, 3, 5 … 31). The tool follows cronie, the cron on most Linux distributions, which marks a day field as unrestricted when its first character is * (crontab(5) describes the either-field rule).
Time Zones
A cron expression has no time zone of its own; the scheduler that reads it supplies one. System cron uses the server’s local time (cronie also reads a CRON_TZ variable in the crontab). GitHub Actions schedules run in UTC unless the schedule sets a timezone (an IANA name such as America/New_York). A Kubernetes CronJob uses the time zone of the kube-controller-manager unless .spec.timeZone is set. Pick UTC in the tool when the target evaluates in UTC, and Local when it uses the same zone as your computer. With UTC selected, 0 9 * * 1-5 lists 09:00 UTC on weekdays; with Local selected in Tokyo it lists 09:00 Japan time.
Limitations
- Five fields only: no seconds field and no Quartz or Spring extensions (
?,L,W,#). An expression typed with them names the field and the value, for exampleDay: "L" is not valid. Use numbers from 1 to 31, *, -, / and commas. - Numbers must be whole decimal numbers:
1.5,5abcand1#2are rejected. A step needs*or a range in front of it, so5/10is rejected, as cronie rejects it. - Weekdays are 0–7 and the names
sun–sat; 0 and 7 are both Sunday, as in cronie’s crontab(5). A typed range that ends in 7, such as5-7, is shown with the weekday buttons (Friday, Saturday, Sunday), because the Range boxes stop at 6; the expression box keeps what you typed. - Values typed into the Minute box are checked.
75showsMinute: "75" is not valid. Use numbers from 0 to 59, *, -, / and commas.and the description and run list stay empty and Copy is disabled until it is fixed. An empty Minute box is reported the same way (Minute: the box is empty. Enter numbers from 0 to 59, *, -, / or commas.); it is not read as*, which would run every minute. - The Step, From and To boxes give the value you type. A step of 0 shows
Minute: "*/0" is not valid. Use numbers from 0 to 59, *, -, / and commas., and a range from 17 to 9 is reported in the same way rather than swapped. A step larger than the field is valid cron (cronie prints a warning but accepts it) and is kept:*/75in Minute runs once an hour, at :00. - A schedule that never occurs, such as
0 0 30 2 *(30 February), shows an empty run list. - The description is in English on every language version of this page.
Cron Expression Field Reference
| Field | Position | Allowed Values | Special Chars |
|---|---|---|---|
| Minute | 1st | 0–59 | * / - , |
| Hour | 2nd | 0–23 | * / - , |
| Day of Month | 3rd | 1–31 | * / - , |
| Month | 4th | 1–12 | * / - , |
| Day of Week | 5th | 0–7 (Sun = 0 or 7) | * / - , |
Common Cron Schedule Examples
The third column is the description the tool shows for each expression.
| Expression | Meaning | Tool description |
|---|---|---|
* * * * * | Every minute | At every minute past every hour |
0 * * * * | Every hour at :00 | At every hour |
0 0 * * * | Every day at midnight | At midnight |
0 9 * * 1-5 | Weekdays at 9 AM | At 9:00, on Monday through Friday |
*/5 * * * * | Every 5 minutes | At every 5 minutes past every hour |
0 0 1 * * | First day of each month | At midnight, on day 1 of the month |
0 0 * * 0 | Every Sunday at midnight | At midnight, on Sunday |
0 0 1 1 * | January 1st at midnight | At midnight, on day 1 of the month, in January |
FAQ
What is a cron expression?
A cron expression is a string of five fields separated by spaces that defines a recurring schedule: minute (0–59), hour (0–23), day of month (1–31), month (1–12), and day of week (0–7, where 0 and 7 are Sunday). The asterisk (*) means 'every value'; */N means 'every N units'; a range like 9-17 means 'from 9 to 17'; and a list like 1,15 means 'on the 1st and 15th'.
What is the difference between cron-job-generator and cron-parser?
The cron-job-generator lets you build a cron expression by selecting options for each field visually — you choose the schedule and the expression is generated. The cron-parser does the reverse: you type an existing expression and it explains what the schedule means and shows the next run times.
What does 'Every N' mode mean?
Every N mode generates a step expression like */5 for the minute field, meaning 'at every 5th minute' (0, 5, 10, 15 … 55). You can use this in any field: */2 in the hour field means 'every 2 hours', */3 in the month field means 'every 3 months', and so on.
Can I combine different modes across fields?
Yes. Each field is independent, so you can mix modes freely. For example, to run at 9 AM on the 1st and 15th of every month, set minute to Specific with the value 0, hour to Specific with 9, day to Specific with 1 and 15, and leave month and weekday on Every. The result is 0 9 1,15 * *.
Why doesn't the generator support six-field (seconds) cron expressions?
The five-field format is the one used by cron (crontab(5)), GitHub Actions and Kubernetes CronJob. Some tools like Quartz Scheduler add a seconds field, but there is no universal standard for it. This generator focuses on the widely supported five-field format.
Is my cron expression sent anywhere or saved?
It is not sent to a server. The page saves the last valid expression and your UTC or Local choice in this browser's local storage, so they come back on your next visit; Ctrl/⌘+L empties the boxes but keeps the saved values, and clearing this site's data in the browser removes them. The page's analytics records a usage event with the tool name and the action when you change the schedule or copy it, not the expression.