What is Cron Generator?
Cron Generator is a browser-based tool for building and understanding cron schedules. Use the per-field controls to construct an expression without memorizing cron syntax, or paste any standard 5-field cron expression to get a plain-English description and a preview of the next times it would run. The builder and the text field stay in sync, so editing either one updates the other.
Cron is the scheduling language used by Unix crontab, CI/CD pipelines, container orchestrators, and countless job schedulers. A cron expression packs a recurring schedule into five terse fields — minute, hour, day of month, month, and day of week — using symbols like *, /, -, and , that are powerful but famously hard to read. A tiny change can mean "every minute" instead of "once a day".
This tool removes the guesswork by translating between the compact expression and a human description, and by showing concrete upcoming run times so you can confirm the schedule does what you intend. Everything runs locally in your browser; nothing is uploaded.
Why use Cron Generator?
Writing cron by hand is error-prone, and mistakes are costly: a misplaced field can cause a job to run far more or far less often than intended, flooding a system or silently skipping work. Building the expression with guided controls and immediately seeing the plain-English meaning catches those errors before they reach production.
The next-run preview is the real confidence-builder. Rather than trusting that "0 9 * * 1-5" means what you think, you see the actual upcoming timestamps, so you can verify the schedule fires on the right days and times. This is especially valuable for tricky combinations of day-of-month and day-of-week.
Being able to paste an existing expression and read it back in English is just as useful for maintenance. When you inherit a crontab or a pipeline config full of cryptic schedules, this tool tells you exactly what each line does. And because it all runs in the browser, your schedules never leave your machine.
Features
- Build a cron expression with per-field controls (every, every N, specific, range)
- Paste any standard 5-field expression to decode it
- Plain-English description of what the schedule means
- Preview of the next upcoming run times
- Builder and text field stay synchronized both ways
- Clear error messages for invalid expressions
- One-click copy of the generated expression
- Runs entirely in your browser — no uploads, works offline
How to use Cron Generator
- Use the builder rows to configure each field — minute, hour, day of month, month, day of week — choosing every, every N, specific values, or a range.
- Watch the cron expression update at the top as you adjust the controls.
- Alternatively, type or paste an existing 5-field cron expression directly into the text field to decode it.
- Read the plain-English description and check the list of next run times to confirm the schedule is correct.
- Copy the expression with one click to paste into your crontab, CI config, or scheduler.
Example 1 — Weekday mornings
A common business-hours schedule: run at 9:00 AM Monday through Friday.
Input
0 9 * * 1-5Output
At 09:00, on day-of-week Monday through Friday.Example 2 — Every 15 minutes
Use a step value in the minute field to run a job four times an hour.
Input
*/15 * * * *Output
Every 15 minutes.Common Mistakes
- Confusing the two "day" fields: day-of-month and day-of-week are separate, and when both are restricted, most cron implementations run the job if either matches — not both. This surprises people who expect an AND relationship.
- Off-by-one on day-of-week numbering: in standard cron, 0 (and often 7) is Sunday. Assuming 0 is Monday shifts your whole weekly schedule by a day.
- Misreading the step operator: */15 in the minute field means "every 15 minutes", but */15 in the hour field means every 15 hours, not quarter-past. Steps apply to their own field's range.
- Forgetting the fields are minute-first: the order is minute, hour, day-of-month, month, day-of-week. Writing the hour first (a common instinct) produces a completely different schedule.
- Assuming seconds are supported: standard 5-field cron has no seconds field — the smallest interval is one minute. Some systems add a 6th seconds field, but that is non-standard.
- Ignoring the scheduler's timezone: cron runs in the server's local timezone unless configured otherwise. A schedule that looks right can fire at unexpected wall-clock times if the server is in a different zone.
Developer Tips
- Always check the next-run preview before deploying a schedule — seeing real upcoming timestamps catches mistakes that a plain expression hides.
- Remember the either-match behavior when both day-of-month and day-of-week are set; if you truly need an AND, restrict only one field and filter the other in your job logic.
- Confirm the timezone your scheduler uses and adjust the hour field accordingly, since cron does not encode a timezone in the expression itself.
- Use step syntax (*/N) for even intervals like every 5 or 15 minutes rather than listing specific values — it is shorter and less error-prone.
- When inheriting an unfamiliar crontab, paste each line here to read its English description before changing anything, so you understand the existing behavior first.
Frequently Asked Questions
- What do the five fields in a cron expression mean?
- A standard cron expression has five space-separated fields, in this order: minute (0-59), hour (0-23), day of month (1-31), month (1-12), and day of week (0-6, where 0 is Sunday). Each field accepts a specific value, a list (1,15,30), a range (1-5), a step (*/10), or an asterisk meaning "every". Together they define a recurring schedule. Getting the field order right is essential, since the fields are minute-first, not hour-first.
- Why does my job run on the wrong day when I set both day fields?
- When you restrict both the day-of-month and the day-of-week fields (neither is an asterisk), most cron implementations use an OR relationship: the job runs whenever either condition matches, not only when both do. So "0 0 1 * 1" runs on the 1st of every month AND on every Monday, not just Mondays that fall on the 1st. If you need an AND relationship, restrict only one day field in cron and check the other condition inside your job.
- How is day-of-week numbered?
- In standard cron, day-of-week is numbered 0 to 6, where 0 is Sunday, 1 is Monday, and so on up to 6 for Saturday. Many implementations also accept 7 as an alternate value for Sunday. A frequent mistake is assuming 0 or 1 means Monday, which shifts the entire weekly schedule. This tool's plain-English description spells out the actual days so you can confirm the numbering is what you intended.
- Does cron support seconds?
- Standard cron does not — the finest granularity of a 5-field expression is one minute, so the earliest a job can repeat is once per minute. Some schedulers (such as certain Java and container-based systems) support an optional sixth seconds field, but that is a non-standard extension. This tool works with the standard 5-field format. If you need sub-minute scheduling, use a system that explicitly supports a seconds field.
- What timezone does a cron schedule use?
- A cron expression itself contains no timezone information — it is just numbers. The schedule runs according to whatever timezone the scheduler or server is configured to use, which is often UTC or the server's local time. This means the same expression can fire at different wall-clock times on differently-configured machines. Always confirm your scheduler's timezone and adjust the hour field so the job runs when you actually expect it to.
- Are the next run times exactly when my job will execute?
- The next-run preview computes when the expression matches, which is when the scheduler will trigger the job, but the actual execution moment depends on your scheduler's timezone and system clock, and jobs can be delayed by load or overlapping runs. Treat the preview as an accurate representation of the schedule's intent in the tool's local time. To be precise for production, verify the times against your server's configured timezone.