HomeGeneratorsDeveloper ToolsCron Expression Generator

Cron Expression Generator

Developer Tools

Build cron expressions visually and get a plain-English description of the schedule. Free, browser-based, no sign-up — instant cron job syntax.

What is a Cron?

A Cron Expression Generator builds the five-field schedule string used by Unix cron, cloud schedulers, and most job scheduling systems — and translates it into plain English so you can verify the schedule is exactly what you intended before deploying.

Cron syntax has been the standard for scheduled tasks on Unix-like systems since 1975. The same five-field format is used today by Linux crontab, macOS launchd, GitHub Actions scheduled workflows, AWS EventBridge, Google Cloud Scheduler, Kubernetes CronJobs, and virtually every modern job scheduling system. Understanding how to write and read cron expressions is an essential skill for any developer or systems administrator working on the backend.

The five fields are read left to right: minute (0–59), hour (0–23), day of month (1–31), month (1–12), day of week (0–7, where 0 and 7 both mean Sunday). Each field accepts a specific value, a wildcard * for 'every', a range 1-5, a step */15, or a comma-separated list 1,15,20.

The trickiest part of cron is not writing the expression — it is verifying that the expression matches your intent. An expression like 0 9 * * 1 looks correct ('9 AM on Monday'), but if you meant '9 AM every weekday', you need 0 9 * * 1-5. The plain-English output from this generator makes that kind of mistake immediately visible.

Use the UUID Generator to generate correlation IDs for tracking individual cron job runs in logs. For developer testing workflows, the Fake Email Generator produces test addresses for scheduled email pipelines and notification systems.

How to use this Cron calculator

  1. Enter the minute field — type a specific minute (e.g. 0 for on the hour), a step like */15 for every 15 minutes, or * for every minute.
  2. Enter the hour field — type a specific hour in 24-hour format (e.g. 9 for 9 AM, 14 for 2 PM), a range (8-18), a step (*/6), or * for every hour.
  3. Enter the day-of-month field — type a calendar day (e.g. 1 for the 1st of each month), a list (1,15), or * for every day.
  4. Enter the month field — type a month number (112), a name abbreviation (JAN, FEB), a range (6-8), or * for every month.
  5. Enter the day-of-week field — type a weekday number (0=Sun through 6=Sat), a range (1-5 for weekdays), a name abbreviation (MON, TUE), or * for every day of the week.
  6. Click Generate — the tool outputs the formatted cron expression and its plain-English description.
  7. Verify the description — read the plain-English output to confirm the schedule matches your intention, then copy the expression for use in your scheduler.

Formula & Methodology

A cron expression is a string of exactly five space-separated fields. The generator joins the five inputs with a single space:

EXPRESSION = minute + " " + hour + " " + dom + " " + month + " " + dow

Field reference:

| Field | Position | Range | Allowed special characters |
|---|---|---|---|
| Minute | 1 | 0–59 | * , - / |
| Hour | 2 | 0–23 | * , - / |
| Day of month | 3 | 1–31 | * , - / |
| Month | 4 | 1–12 or JAN–DEC | * , - / |
| Day of week | 5 | 0–7 (0 and 7 = Sunday) or SUN–SAT | * , - / |

Special character rules:
- * — matches every value in the field
- , — separates a list of values: 1,15 means the 1st and 15th
- - — defines a range: 1-5 means 1, 2, 3, 4, 5
- / — defines a step: */15 in the minute field means every 15 minutes; 2/15 means every 15 minutes starting at minute 2

Common patterns:

| Expression | Meaning |
|---|---|
| * * * * * | Every minute |
| 0 * * * * | Every hour on the hour |
| 0 0 * * * | Daily at midnight |
| 0 9 * * 1-5 | Weekdays at 9:00 AM |
| */15 * * * * | Every 15 minutes |
| 0 0 1 * * | First day of every month at midnight |
| 0 9,17 * * 1-5 | Weekdays at 9 AM and 5 PM |
| 0 0 * * 0 | Every Sunday at midnight |
Frequently Asked Questions
What is a cron expression?
A cron expression is a string of five fields — minute, hour, day-of-month, month, and day-of-week — that together define a recurring schedule for a task. Cron is the job scheduler built into Unix-like operating systems (Linux, macOS), and cron expressions are the syntax it uses to specify when a job should run. The expression `0 9 * * 1-5` means 'at 9:00 AM every weekday', and `*/15 * * * *` means 'every 15 minutes'. Most modern job schedulers, cloud platforms, and CI/CD tools use the same five-field cron syntax.
What do the five fields in a cron expression mean?
Reading left to right: the first field is the minute (0–59), the second is the hour (0–23 in 24-hour time), the third is the day of the month (1–31), the fourth is the month (1–12 or JAN–DEC), and the fifth is the day of the week (0–7, where both 0 and 7 represent Sunday, or SUN–SAT). Each field can be a specific value, an asterisk `*` (meaning 'every'), a range (`1-5`), a step (`*/15`), or a comma-separated list (`1,15`).
What does the asterisk (*) mean in a cron expression?
An asterisk in a cron field means 'every possible value for this field'. In the minute field, `*` means every minute (0 through 59). In the hour field, `*` means every hour (0 through 23). In the day-of-month field, `*` means every day of the month. So `* * * * *` runs every minute of every day, while `0 * * * *` runs at the start of every hour (minute 0, every hour).
How do I write a cron expression that runs every 15 minutes?
Use the step syntax `*/15` in the minute field: `*/15 * * * *`. The `*/n` pattern means 'every n units starting from 0'. So `*/15` in the minute field produces runs at :00, :15, :30, and :45 of every hour. Similarly, `*/6 * * * *` runs every 6 minutes, and `0 */4 * * *` runs every 4 hours on the hour. The step syntax works in all five fields.
How do I run a cron job only on weekdays?
Use `1-5` in the day-of-week field (Monday through Friday). For example, `0 9 * * 1-5` runs at 9:00 AM every weekday. Many cron implementations also accept the named shorthand `MON-FRI`. To run on weekends only, use `0,6` or `SAT,SUN` in the day-of-week field. Note: when both the day-of-month and day-of-week fields are non-asterisk, most cron implementations run the job when *either* condition is met, not both — this is a common source of unintended schedules.
What is the difference between day-of-month and day-of-week in cron?
The day-of-month field (third position) specifies which calendar day to run — for example, `15` means the 15th of every month. The day-of-week field (fifth position) specifies which weekday to run — for example, `1` means every Monday. When you set both to non-asterisk values, most cron daemons treat it as an OR condition: the job runs if *either* the day-of-month matches or the day-of-week matches. To schedule 'the first Monday of each month', you need a workaround (typically a shell `if` check inside the job).
Do cron schedules run in UTC or local time?
By default, cron on Linux uses the server's local timezone as set in `/etc/timezone` or `TZ` environment variable. Many hosted schedulers (AWS EventBridge, GitHub Actions, Kubernetes CronJobs) run cron in UTC by default. This is a frequent source of bugs: a cron job written to run at '9 AM' runs at the wrong wall-clock time after a timezone offset. When deploying cron jobs in production, always confirm the timezone and convert your intended local time to UTC explicitly.
How do I test if my cron expression is correct before deploying?
The Cron Expression Generator shows a plain-English description of the schedule alongside the expression — this is the fastest way to verify that the expression matches your intent. For additional verification, tools like `crontab guru` online or the `cronitor` CLI can explain and simulate cron expressions. In production, always test with a more frequent schedule first (e.g. every minute) to confirm the job runs, then switch to the intended interval.
What are some common cron expression examples?
Frequently used patterns: `0 * * * *` — every hour on the hour; `0 0 * * *` — daily at midnight; `0 9 * * 1-5` — every weekday at 9 AM; `0 0 1 * *` — first day of every month at midnight; `*/5 * * * *` — every 5 minutes; `0 0 * * 0` — every Sunday at midnight; `0 9,17 * * 1-5` — weekdays at 9 AM and 5 PM; `0 0 1 1 *` — once a year on 1st January at midnight.
Does cron support seconds? Can I schedule a job to run every 30 seconds?
Standard Unix cron uses five fields with minute as the finest granularity — you cannot schedule a job to run every 30 seconds with standard cron. Some extended implementations (Quartz Scheduler in Java, AWS EventBridge, some cron libraries) add a sixth field for seconds at the start, giving a six-field expression. For sub-minute scheduling in production, use a purpose-built job queue (Sidekiq, Celery, BullMQ) rather than cron.
What is the difference between crontab and a cron expression?
A crontab (cron table) is the file or system where cron jobs are defined — it contains one or more lines, each combining a cron expression with the command to run. A cron expression is just the five-field schedule portion of a crontab line. The full crontab line looks like: `0 9 * * 1-5 /home/user/backup.sh`. The Cron Expression Generator produces the expression part; the command you run is separate.