DevOps
Cron expression generator
Pick a preset or type your cron expression and get a clear explanation, per-field validation and the next 5 firing times. Everything runs in your browser - the expression is never sent to a server.
Explanation
Every 5 minutes.
crontab
# generated by toolsops */5 * * * *
Next runs by timezone
The expression is evaluated in the chosen timezone. Runs are shown in that timezone and in UTC.
Could not compute the next runs. Check the expression and the timezone.
The link only includes the expression, timezone and run count. It adds no extra parameters or identifiers.
What about my runner? How each executor reads the timezone
- On system cron (/etc/crontab), the timezone is inherited from the system. To pin it, set TZ= inside the crontab before the job line.
- In Docker, the container timezone is usually UTC unless you pass TZ=Region/City as an environment variable or copy /etc/localtime.
- On Kubernetes CronJob, spec.schedule is interpreted under spec.timeZone when that field is present (stable in modern versions). If spec.timeZone is omitted, the schedule follows the local timezone of the kube-controller-manager, NOT guaranteed UTC.
- GitHub Actions cron schedules always run in UTC. There is no setting to change it.
- Cloudflare Scheduled Workers also runs in UTC. There is no timezone selector in wrangler.toml.
Syntax
*any value*/5every 5 units1-5range (inclusive)1,3,5list of values0-30/10range with step
Cron expression generator and calculator
A cron expression is a five-field string separated by spaces that describes a recurring schedule: minute, hour, day-of-month, month and day-of-week. This page combines three operations people usually search for separately: generate the expression from a preset, validate one you type by hand and explain in plain language what it will fire. It also computes the next five firing times in your local time zone.
The term "cron job" usually refers to the scheduled task itself (the command crontab runs when the schedule fires); "cron expression" is the string that defines that schedule. This tool produces the expression - the command afterwards depends on your system.
| Expression | Meaning |
|---|---|
*/5 * * * * | Every 5 minutes. |
0 * * * * | On minute 0 of every hour. |
0 0 * * * | Every day at midnight. |
0 9 * * 1-5 | Monday through Friday at 09:00. |
0 0 1 * * | First day of every month at midnight. |
0 0 * * 0 | Every Sunday at midnight (0 also accepts 7). |
Generate, validate and explain are three distinct operations
When someone searches for "cron expression generator", "cron calc" or "cron job generator", they usually need one of these three things. The same page covers all of them:
- Generate: start from a preset (every 5 minutes, weekdays at 09:00, first day of every month…) and get the exact expression ready to copy into your crontab.
- Validate: paste an expression and the tool tells you whether it's syntactically correct and which field fails if it isn't.
- Explain: any valid expression is translated to plain language ("every 5 minutes", "Monday through Friday at 09:00"), so you can verify that it matches your intent before pasting it into production.
Day-of-month and day-of-week: the POSIX trap
When both fields are restricted at the same time (neither is '*'), most Unix/POSIX cron implementations combine them with OR, not AND. `0 0 1 * 1` fires BOTH on the 1st of every month AND on every Monday, not only on "Mondays that fall on the 1st".
It is one of the most confusing subtleties of cron. The tool shows this explicitly in the plain-language explanation when it detects the case and suggests alternatives if what you wanted was AND (often achieved by moving the logic into the executed command).
This tool vs Quartz, EventBridge and systemd timers
There are several cron variants in the ecosystem. This tool covers the Unix/POSIX 5-field format, the most widespread on Linux servers and in classic crontab. Other variants (Quartz with 6 or 7 fields including seconds and year, AWS EventBridge with its own flavour, systemd OnCalendar with a different syntax) are not processed here; it's worth knowing what you're holding before copy-pasting.
- If your expression starts with an extra seconds field or ends with a year (`0/15 * * * * ?`), it is Quartz: use a Quartz-aware parser.
- AWS EventBridge accepts `?` and extra fields not recognised here.
- systemd OnCalendar uses a completely different language (`Mon..Fri 09:00`); it has its own documentation.
- This page warns when an expression is not 5-field Unix instead of pretending compatibility.
Examples
* * * * *Every minute*/5 * * * *Every 5 minutes0 2 * * *Every day at 02:000 9 * * 1-5Monday to Friday at 09:000 0 1 * *First day of every month
Frequently asked questions
- What is a cron expression?
- It's a five-field string separated by spaces that describes a recurring schedule for the Unix cron daemon: minute, hour, day-of-month, month and day-of-week. Each field accepts specific values (0-59 for minute, 0-23 for hour, etc.), ranges (1-5), lists (1,15,30) and shortcuts like `*/5`. For example, `*/5 * * * *` means every 5 minutes. The cron daemon uses the expression to decide when to run the matching task.
- How do I generate a cron expression with this tool?
- Two paths. If you need a common schedule (every 5 minutes, every day at midnight, weekdays at 09:00…), pick a preset from the selector and you'll get the exact expression ready to copy into your crontab. If you need something custom, edit the five fields manually: the tool validates each field as you type and shows a plain-language explanation along with the next five firing times in your local time zone.
- What's the difference between a cron expression and a cron job?
- A cron expression is the string that describes the schedule (`0 9 * * 1-5`). A cron job is the scheduled task itself: the expression plus the command to run, registered in crontab. When people talk about a "cron job generator" they usually mean generating the expression that defines the schedule - which is exactly what this tool produces. The command after that depends on your system (scripts, containers, shell commands) and is added later in the crontab file or your platform's equivalent.
- Does this tool support Quartz or cron with seconds?
- No. This version supports 5-field Unix cron only (minute, hour, day-of-month, month, day-of-week). Pasting an expression with 6 or 7 fields (seconds / year, Quartz format) will surface a warning. Use a Quartz-aware parser for that.
- Which time zone is used for the next runs?
- Your browser's local time zone. Dates are computed by iterating minute by minute from now, with no external libraries and no server calls. If you deploy the cron to a remote server, the effective time zone will be the server's, not the one shown here.
- Why does the day-of-week field accept both 0 and 7?
- Both 0 and 7 represent Sunday in most Unix cron implementations. The tool normalizes 7 to 0 internally to avoid duplicates.
- Is my cron expression sent to a server?
- No. All processing happens inside your browser. There are no backend calls, nothing is stored in localStorage, and everything disappears when you close the tab. You can use the tool with production expressions safely.
- Why does '0 0 31 2 *' show no next runs?
- February 31 doesn't exist in the calendar, so no future date can satisfy that combination. The calculation gives up after a year of iteration without matches and a small note is shown.
- Can I combine day-of-month and day-of-week in the same expression?
- Yes. When day-of-month and day-of-week are BOTH restricted (neither is '*'), the tool applies the Unix/POSIX semantics: the expression fires if EITHER matches (OR). For example, '0 0 1 * 1' runs on the 1st of every month and every Monday. If only one of the two fields is restricted, the other ('*') always matches and the rule reduces to the restricted one. As always, validate against your system's actual cron if your environment uses a variant (Quartz, cronie, busybox, etc.) with different semantics.