Cron Expression Generator & Translator
Build a cron expression by clicking, or paste one in and get the plain-English translation instantly. Supports standard 5-field Unix cron and 6-field Quartz/Spring syntax, with a live next-run-times preview — no crontab guesswork.
Nothing you build or paste here is sent to a server — it all runs client-side.
minute hour day month weekday second
0 9 * * 1-5
What this means
Every weekday at 09:00 (9:00 AM).
Next 5 runs (your local time)
5 fields loads as standard cron, 6 fields loads as Quartz/Spring.
Common Cron Schedules
The ready-made cron expressions people search for most — every 5 minutes, every hour, every weekday morning. Click "Use" to load one straight into the builder above.
| Schedule | Cron expression |
|---|
Cron Syntax Reference
A quick crontab cheat sheet for the special characters and field ranges cron expressions use, in both standard and Quartz/Spring syntax.
| Symbol | Meaning | Example |
|---|---|---|
| * | Any value | * = every minute |
| , | List separator | 1,15,30 |
| - | Range | 9-17 |
| / | Step | */15 |
| ? | No specific value (Quartz day fields only) | ? * MON |
| L | Last day (Quartz/AWS — not yet supported here) | L = last day of month |
| W | Nearest weekday (Quartz — not yet supported here) | 3W |
| # | Nth weekday of month (Quartz/AWS — not yet supported here) | 6#3 = 3rd Friday |
| Field | Standard cron | Quartz / Spring |
|---|---|---|
| Seconds | — | 0-59 |
| Minutes | 0-59 | 0-59 |
| Hours | 0-23 | 0-23 |
| Day of month | 1-31 | 1-31 or ? |
| Month | 1-12 / JAN-DEC | 1-12 / JAN-DEC |
| Day of week | 0-6 (0=Sun) | 1-7 or ? (1=Sun) |
| Year | — | optional, 1970-2099 |
What Is Crontab? What Is a Cron Expression?
Cron is the time-based job scheduler built into every Linux and Unix system. The cron daemon wakes up once a minute, checks a schedule, and runs whatever jobs are due. Crontab ("cron table") is both the file where that schedule lives and the command you use to edit it — crontab -e opens your personal crontab for editing, crontab -l lists what's currently scheduled.
Each line in a crontab file is a cron expression followed by the command to run: five space-separated fields for minute, hour, day-of-month, month, and day-of-week, then the command itself. 0 3 * * * /usr/bin/backup.sh means "at 03:00 every day, run backup.sh." Get the cron expression wrong and the job either never fires or fires at the wrong time — which is exactly what the builder above exists to prevent.
Modern deployments increasingly wrap raw crontab with something friendlier: systemd timers on newer Linux distributions, GitHub Actions and GitLab CI schedules for pipelines, and workflow automation tools like n8n, whose Schedule Trigger node accepts the same cron syntax through a visual interface instead of a text file you edit over SSH.
Quartz Cron vs Standard Unix Cron
Not every scheduler speaks the same cron dialect. Here's what actually changes.
Standard cron (also called Vixie cron, the flavor behind Linux's crontab) uses 5 fields and treats an unrestricted field as a bare *. If you restrict both day-of-month and day-of-week, standard cron runs the job when either condition matches — an OR, not an AND. It's a well-known gotcha that catches even experienced engineers off guard.
Quartz cron — the format used by the Java Quartz Scheduler library and Spring Boot's @Scheduled(cron = "...") annotation — adds a seconds field at the front and an optional year field at the end, for 6 or 7 fields total. It also enforces a stricter rule: day-of-month and day-of-week can't both be restricted, so exactly one of them must be a literal ? (unrestricted). Quartz also numbers day-of-week 1-7 with 1 = Sunday, instead of standard cron's 0-6 — this generator defaults to day names (SUN, MON...) in Quartz mode specifically to sidestep that off-by-one trap.
AWS EventBridge cron expressions follow the same "exactly one of day-of-month/day-of-week must be ?" rule and the same 1-7 (Sunday-first) weekday numbering as Quartz — but swap the leading seconds field for a trailing, mandatory year field instead: minutes hours day-of-month month day-of-week year, six fields, no seconds. If you're building an EventBridge schedule, use this tool to get the day/month logic right, then drop the leading second and add a trailing * for the year.
Where this fits in your stack
Using a Cron Expression in n8n
n8n's Schedule Trigger node has a "Custom (Cron)" interval that accepts a standard 5-field cron expression, with an optional 6th field prepended for seconds — n8n's own docs give */10 * * * * * as the example for "every 10 seconds." Build your schedule in Standard mode above and paste the expression straight into the node's Expression field. If you need sub-minute precision, add a seconds value to the front — but skip the Quartz ? character, since n8n doesn't require or parse it.
Once the schedule's dialed in, the job still needs somewhere that's actually running at 3am on a Sunday to fire it. Managed n8n hosting on OpenHosst starts at $2.99/month with unlimited workflows and executions — no watching a laptop cron job die the moment you close the lid.
Frequently Asked Questions
Everything people ask about cron expressions, crontab, and Quartz syntax.
A cron expression is a short string of five fields — minute, hour, day-of-month, month, and day-of-week — that tells the cron daemon exactly when to run a scheduled job. Each field accepts a number, a wildcard (*), a comma-separated list, a range (a-b), or a step (*/n). For example, 0 9 * * 1-5 means "at 09:00, Monday through Friday."
Crontab ("cron table") is the file that stores a user's scheduled jobs, and crontab is also the command — crontab -e to edit, crontab -l to list — used to manage it on Linux and Unix systems. The cron daemon reads every user's crontab once a minute and runs any job whose cron expression matches the current time.
Cron is the background daemon that checks the schedule every minute and executes due jobs. Crontab is the file format and command-line tool used to define what cron should run and when. In short: cron is the engine, crontab is the schedule you hand it.
Use the cron expression */5 * * * * in your crontab. The */5 step syntax in the minute field means "every 5th minute," so the job fires at :00, :05, :10, and so on. The cheat sheet above has this pre-built for every 5, 10, 15, and 30-minute interval — just click "Use."
A persistent crontab is one that keeps running across reboots and process restarts, rather than a cron job defined only in a temporary shell session. On a normal Linux server, crontab entries are written to /var/spool/cron and persist automatically as long as the cron daemon starts on boot. The common gotcha is ephemeral environments — bare Docker containers, serverless functions, or short-lived VMs — where no cron daemon runs persistently unless you explicitly configure one or use an always-on host.
Standard Unix cron uses 5 fields (minute, hour, day-of-month, month, day-of-week). Quartz cron, used by Java schedulers and Spring Boot, adds a seconds field at the front (and an optional year field at the end), making 6 or 7 fields total. Quartz also requires exactly one of day-of-month or day-of-week to be a literal question mark (?), since standard cron's OR-logic between those two fields doesn't apply in Quartz.
No. Standard Unix cron numbers day-of-week 0-6 (0 = Sunday), with 7 also accepted as Sunday. Quartz cron numbers day-of-week 1-7, where 1 = Sunday and 7 = Saturday. This one-position offset is a common source of off-by-one scheduling bugs — using day names (SUN, MON, TUE...) instead of numbers sidesteps the ambiguity entirely, which is why this generator defaults to names in Quartz mode.
In standard Unix cron, if both day-of-month and day-of-week are restricted (neither is *), the job runs when EITHER condition is true — it's an OR, not an AND. For example, 0 0 1 * 1 runs at midnight on the 1st of the month OR every Monday, not only on Mondays that happen to fall on the 1st. This is a well-known cron gotcha that trips up a lot of scripts.
A cron job runs in the system timezone of the machine (or container) executing it, not in the timezone of whoever wrote the expression. Most managed servers and Docker base images default to UTC. This tool's "next run" preview uses your browser's local timezone for readability, but always double-check the actual server timezone (via the TZ environment variable or timedatectl) before relying on exact run times in production.
Yes. n8n's Schedule Trigger node has a "Custom (Cron)" mode that accepts a standard 5-field cron expression, with an optional 6th leading field for seconds (n8n's own docs give */10 * * * * * as "every 10 seconds"). Use this generator's Standard mode output directly in n8n; if you need sub-minute precision, prepend a seconds value. n8n does not require the Quartz-style ? exclusivity character — stick to standard cron syntax when pasting into n8n.
Not yet. L (last day), W (nearest weekday), and # (nth weekday of the month) are Quartz/AWS EventBridge extensions used for patterns like "last Friday of the month." This generator will parse and describe expressions containing them without crashing, but next-run calculation for those specific fields isn't supported yet.
Yes. The OpenHosst Cron Expression Generator is completely free, requires no sign-up, and runs entirely in your browser — no expression you build or paste is sent to any server.
Scheduled It. Now Host It.
A perfect cron expression still needs somewhere reliable to run. OpenHosst manages n8n hosting from $2.99/month — unlimited workflows, unlimited executions, no DevOps required.
No payment required • Unlimited executions • Cancel anytime