Skip to content

Calculators

Cron Explainer

Decode cron expressions in plain English.

Runs in your browser

Cron syntax, in plain English.

Minute
Hour
Day
Month
Weekday

Runs at every 15 minutes past 9-17, every day, every month on Monday–Friday.

Common patterns

Format: minute hour day month weekday. Step values (*/5), ranges (9-17) and lists (1,3,5) all work.

Understanding cron

Five fields, one schedule.

Cryptic until you see the grid. Obvious afterwards.

The five fields.

A cron expression is five space-separated fields, read left to right: minute, hour, day of month, month, day of week. Each field accepts a number, a list, a range, a step, or a wildcard. Together they describe a schedule.

minute · hour · day · month · weekday

Field ranges

  • minute — 0–59
  • hour — 0–23
  • day of month — 1–31
  • month — 1–12 (or JAN–DEC)
  • day of week — 0–6 (Sun = 0; or SUN–SAT)

The metacharacters.

Five small symbols carry the language. * means "every value in this field." , separates a list (1,15,30). - denotes a range (9-17). / is a step (*/15 means "every 15"). And ? appears in some implementations to mean "no specific value" in the day fields. That's the whole alphabet.

Four patterns worth memorising.

Read aloud as the schedule

  • 0 * * * *every hour, on the hour
  • */5 * * * *every five minutes
  • 0 9 * * 1-509:00 every weekday
  • 0 0 1 * *midnight on the first of every month

The day-of-month and day-of-week trap.

When both day fields are anything other than *, they combine with OR, not AND. So 0 0 1 * 1 doesn't mean "midnight on the first of the month, but only if it's a Monday" — it means "midnight on the first of the month, OR midnight on every Monday." The second-most-common cron bug, behind UTC versus local time.

The shorthand.

Most cron implementations accept a few named shortcuts that replace all five fields: @hourly, @daily (midnight), @weekly (Sunday midnight), @monthly (1st of the month at midnight), @yearly (Jan 1 at midnight). They're identical to writing out the equivalent five-field expression and they read more clearly.

A note on time zones.

Classic Unix cron runs in the server's local time zone. Modern schedulers (GitHub Actions, AWS EventBridge, Kubernetes CronJobs) generally run in UTC unless told otherwise. The single most common cron bug is "this should have run at 9 AM and it ran at 5 AM" — daylight saving and zone offsets bite. When in doubt, write the expression in UTC and translate.

Read next

Frequently asked questions

Quick answers.

What are the 5 cron fields?

minute (0-59), hour (0-23), day-of-month (1-31), month (1-12), day-of-week (0-7, both 0 and 7 mean Sunday).

How do I run something every 15 minutes?

Use */15 * * * * — that's 'every 15 minutes, every hour, every day'.

What does the '?' mean?

Quartz/Java cron uses '?' to mean 'no specific value' in either day-of-month or day-of-week. Standard Unix cron doesn't use it.

Day of week — is Sunday 0 or 7?

Both, in standard Unix cron. Some systems (Quartz) use 1-7 with Sunday = 1. We follow Unix convention.

Is the explainer free?

Yes — fully free, no signup, runs in your browser.

People also search for

Use with

What people reach for next.

Related tools

More in this room.

See all in Calculators