Free Cron Expression Generator Online: Visual Builder + Explainer
A cron expression is a five-field string — minute, hour, day of month, month, day of week — that tells a scheduler exactly when to run a task. For example, 0 9 * * 1 means 9:00 AM every Monday. The syntax is compact but unforgiving: one wrong field and your backup runs at 9 PM instead of 9 AM, or every minute instead of every hour. This guide explains how cron expressions actually work, the traps everyone falls into, and how to generate and verify them free without signing up.
TL;DR — the short answer
To generate a cron expression free with no signup, use a visual cron expression generator: pick the schedule in plain controls and it writes the expression for you. Paste any existing expression to get a plain-English explanation and a preview of the next run dates — before you put it in production. Everything runs in your browser; nothing is uploaded.
What is a cron expression, exactly?
Cron is the time-based job scheduler built into Unix-like systems since the 1970s, and its expression format has become the standard way to describe recurring schedules — in crontabs, CI pipelines, Kubernetes CronJobs, and cloud schedulers. A standard cron expression has five fields, separated by spaces, read left to right from the most frequent to the least frequent unit:
| Field | Allowed values | Special characters |
|---|---|---|
| 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 and 7 are both Sunday) | * , - / |
The four special characters do all the work: * means “every”, , lists values (1,15 = the 1st and 15th), - defines ranges (1-5 = Monday to Friday), and / sets a step (*/15 = every 15 units). So 30 2 * * 1-5 reads as: at 2:30 AM, every weekday. Once you can read that sentence, you can read any cron expression.
Generating an expression in four steps
- Describe the schedule in words. Decide what you actually want: “every 15 minutes”, “weekdays at 9 AM”, “the 1st of each month at midnight”. Writing the sentence first prevents the classic mistake of building the expression backwards.
- Build it visually. In the cron generator, set each field with the dropdowns — minutes, hours, days — and watch the expression assemble itself. No memorization required.
- Read the explanation back. The explainer translates the expression into plain English (“At 09:00 on Monday”). If the English doesn't match the sentence from step 1, fix the fields.
- Check the next run dates. The preview lists the upcoming fire times. This is where timezone surprises and the day-of-month trap (below) get caught — before anything runs in production.
Try it now with ToolsOfWeb's free cron expression generator — builder, explainer, and next-run preview in one page, no account, everything in your browser.
Common expressions cheat sheet
The schedules people actually search for, ready to copy. Verify each one in the explainer before using it — two minutes of checking beats a 3 AM incident.
| Expression | Runs |
|---|---|
| * * * * * | Every minute |
| */15 * * * * | Every 15 minutes |
| 0 * * * * | Every hour, at the top of the hour |
| 0 0 * * * | Every day at midnight |
| 30 2 * * * | Every day at 2:30 AM |
| 0 9 * * 1 | Every Monday at 9:00 AM |
| 0 9 * * 1-5 | Weekdays (Mon–Fri) at 9:00 AM |
| 0 0 1 * * | The 1st of every month at midnight |
| 0 0 * * 0 | Every Sunday at midnight |
| 0 18 * * 5 | Every Friday at 6:00 PM |
The day-of-month vs day-of-week trap
This is the single most misunderstood part of cron, and it bites even experienced engineers. When both the day-of-month and day-of-week fields are restricted (neither is *), standard cron combines them with OR logic — the job runs when either field matches. So 0 0 1 * 1 does not mean “Mondays that fall on the 1st”. It means “the 1st of every month and every Monday” — roughly five times a month instead of once or twice a year. The behavior is documented in the crontab manual, but almost nobody reads it until after the incident.
If you genuinely need the intersection (only Mondays that are the 1st), cron cannot express it directly. The standard workaround is to schedule broadly —0 0 * * 1 — and add the date check inside the script itself. The generator's next-run preview makes the OR behavior visible immediately, which is exactly why you check the dates before saving.
Standard cron vs Quartz: know which one you're writing
Not every “cron expression” is the same format. Standard Unix/Vixie cron uses 5 fields starting with minutes. Quartz — used by Java schedulers, Spring, and several cloud platforms — uses 6 or 7 fields starting with seconds, and it requires a ? (“no specific value”) in either the day-of-month or day-of-week field. A Quartz expression like 0 0 9 ? * MON (seconds, minutes, hours, day-of-month=?, month, day-of-week) is not valid standard cron, and a 5-field expression pasted into a Quartz scheduler will be rejected or misread. Before copying an expression from a blog post or AI answer, check which format your platform expects — AWS EventBridge, Kubernetes CronJobs, and GitHub Actions each document their own variant.
Three gotchas worth knowing
The impossible date. 0 0 30 2 * looks like “February 30th” — a date that never exists. Cron silently never runs it, with no error and no log entry. Any day-of-month above 28 combined with February, or the 31st with a 30-day month, has the same problem. If a job mysteriously never fires, check the calendar first.
The timezone trap. Cron runs on the server's clock, and most servers run UTC. “9 AM” in your expression is 9 AM UTC — which is 2 AM in Los Angeles and 2 PM in Karachi. Convert your local time to the server timezone before writing the expression, and be explicit in comments or documentation about which timezone the schedule assumes.
The @reboot surprise. The @reboot shortcut runs a job once at system startup — handy for services, dangerous on machines that reboot often or unexpectedly. It also isn't available in every cron implementation, so a crontab that works on your laptop may fail on a minimal container image. Prefer an explicit schedule unless startup execution is truly what you want.
FAQs
What is a cron expression?+
A cron expression is a five-field string that tells a scheduler when to run a task: minute, hour, day of month, month, and day of week. For example, "0 9 * * 1" means 9:00 AM every Monday. The asterisk means "every", so "0 * * * *" runs at the top of every hour.
How do I generate a cron expression without memorizing the syntax?+
Use a visual cron generator: pick the schedule in plain controls (every N minutes, on weekdays at 9 AM, on the 1st of the month) and it writes the expression for you. The free cron generator linked in this guide also explains existing expressions and previews the next run dates, so you can verify before saving.
What does */5 * * * * mean?+
It means "every 5 minutes". The slash sets a step value: the field is divided into steps, so */5 in the minute field fires at minutes 0, 5, 10, 15, and so on. Similarly, "0 */2 * * *" runs every 2 hours at the top of the hour.
Why does my cron job run on more days than I expected?+
Almost always the day-of-month vs day-of-week trap. When both fields are restricted (neither is *), standard cron uses OR logic: "0 0 1 * 1" runs on the 1st of the month AND every Monday, not only on Mondays that are the 1st. This is the most common cron surprise, and it is documented in the crontab manual.
What is the difference between standard cron and Quartz cron?+
Standard (Vixie/Unix) cron uses 5 fields starting with minutes. Quartz (used by Java schedulers and some cloud services) uses 6 or 7 fields starting with seconds, and requires a ? in either the day-of-month or day-of-week field. An expression written for one will not work in the other — check which your platform expects.
How do I run a cron job every day at midnight?+
Use "0 0 * * *": minute 0, hour 0, every day of month, every month, every day of week. For midnight in a specific timezone, remember cron uses the server timezone — on most servers that is UTC, so convert your local time first.
Can a cron expression run every 30 seconds?+
No — standard cron has one-minute resolution, so the shortest interval is every minute ("* * * * *"). For sub-minute schedules, run the job every minute and add a sleep loop inside the script, or use a scheduler with seconds support like Quartz or systemd timers.
What are the @reboot, @daily, and @hourly shortcuts?+
They are nicknames for common schedules: @reboot runs once at startup, @yearly and @annually mean "0 0 1 1 *", @monthly is "0 0 1 * *", @weekly is "0 0 * * 0", @daily and @midnight are "0 0 * * *", and @hourly is "0 * * * *". They work in Vixie/ISC cron but not in every implementation, so check your platform.
Why didn't my cron job run during daylight saving time?+
Cron follows the system clock, so during the spring-forward transition the skipped hour simply does not exist — a job scheduled for 2:30 AM never fires that day. During the fall-back transition, 2:30 AM happens twice, so the job can run twice. Avoid scheduling critical jobs between 1 AM and 3 AM if your server observes DST.
Is my cron expression data uploaded anywhere?+
Not with the tool linked in this guide — the builder, explainer, and next-run preview all run in your browser with JavaScript. Your schedules never leave your device, which is one less place for infrastructure details to leak.
For more free developer utilities, see ToolsOfWeb's Unix Timestamp Converter and UUID Generator.
