Ultimate Guide · 2026

Cron Expression Cheat Sheet: 50 Real-World Schedules Explained in Plain English

Cron is the quiet engine behind most of the internet — but its five cryptic fields scare away more developers than almost any other syntax. This guide breaks every field and special character down into plain English, then gives you 50 real-world schedules you can copy straight into your crontab, CI pipeline or cloud scheduler.

Benjamin Rotshtein

Written by Benjamin Rotshtein

Updated

What is a cron expression?

A cron expression is a compact string of five fields that tells a schedulerwhen to run a job. The cron daemon on Linux, GitHub Actions, cloud schedulers and thousands of libraries all speak the same five-field dialect:

# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of the week (0 - 7) (0 or 7 is Sunday)
# │ │ │ │ │
# * * * * * command-to-run

Each field is either a concrete value, a range, a list, or a wildcard. When a field is *, it means “match any value” — the job runs whenever that field would not otherwise rule it out.

PosFieldRangeExampleMeaning
1Minute0–59`30` runs at minute 30The minute of the hour
2Hour0–23`9` runs at 9 AMThe hour of the day (24-hour clock)
3Day of month1–31`1` runs on the 1stThe day of the month
4Month1–12`6` runs in JuneThe month (or JAN–DEC)
5Day of week0–7`0` runs on SundayDay of week; 0 and 7 are Sunday

Special characters: the operators behind real schedules

Almost every interesting cron expression is built from just seven operators. Learn these and you can read — and write — any schedule on the planet:

CharNameExampleMeaning
*Any value`* * * * *`Every minute of every hour, all year
,List`0 9 * * 1,3,5`Mon, Wed and Fri at 9 AM
-Range`0 9 * * 1-5`Monday to Friday at 9 AM
/Step`*/15 * * * *`Every 15 minutes
LLast`0 0 L * *`Last day of the month
WWeekday`0 0 15W * *`Nearest weekday to the 15th
#Nth weekday`0 0 * * 1#2`Second Monday of the month
?No specific value`0 0 ? * *`Used in Quartz; ignored when the other day field is set

50 real-world cron schedules, explained

Here is every schedule from our cron schedule library, grouped by use case. Click any card to open its dedicated page with the next five run times and copy-paste code for Python, Node.js, Bash and n8n.

Frequent intervals: monitoring, syncs and heartbeats

Daily jobs: rollups, backups and off-peak processing

Weekly jobs: reports and weekday automation

Monthly & yearly jobs: billing, archives and maintenance

How to read any cron expression in plain English

Reading cron is just pattern-matching. Start at the left: ask which minute, then which hour, then which days. For 0 9 * * 1-5 the answer is: minute zero, hour nine, any date, any month, days Monday through Friday → “weekdays at 9 AM”. For */15 * * * * the step operator tells you the minute field matches every 15th minute →“every 15 minutes”.

The fastest way to sanity-check an expression before deploying it is to see the next real execution times. Our cron generator translates any expression into plain English and previews the next five runs live — no installation needed.

Common cron mistakes (and how to avoid them)

  • Confusing day-of-month with day-of-week. 0 0 1 * 1 means the 1st of the month or any Monday — not “the first Monday”. Use the # operator for “the Nth weekday”.
  • Forgetting cron runs in server time. A job at 0 9 * * * runs at 9 AM in the scheduler’s timezone, not yours. Always confirm the timezone of your host, CI service or cloud scheduler.
  • Using five fields in a six-field system. Quartz and some cloud schedulers accept seconds — but Linux cron does not. Check the documentation of your platform before copying an expression.
  • Assuming daylight saving is handled. During DST transitions an hourly job can run twice or not at all. Schedulers like cron do not adjust automatically.
  • Not testing the output. A valid expression is not necessarily the one you wanted. Preview the next run times before you deploy anything that triggers payments or emails.

Copy-paste snippets for popular runtimes

Cron strings are portable, but each runtime has its own way of declaring them. Here is the same “every 5 minutes” schedule in five places:

# cron  (Linux / macOS / BSD)
*/5 * * * * /usr/bin/your-job.sh

# Python (croniter / apscheduler)
schedule.every(5).minutes.do(your_job)

# Node.js (node-cron)
cron.schedule('*/5 * * * *', () => yourJob());

# GitHub Actions
on:
  schedule:
    - cron: '*/5 * * * *'

# n8n
"cronExpression": "*/5 * * * *"

Each schedule page on this site includes the exact snippet syntax for your runtime — open one from the list above and copy it in one click.

Frequently asked questions

What does * * * * * mean in cron?

`* * * * *` runs a job every minute of every hour, every day of the year. Each `*` means "any value" for that field, so all five fields match at all times.

How do I run a cron job every 5 minutes?

Use the step operator: `*/5 * * * *`. The `/` divides the minute field into steps of five, so the job runs at minute 0, 5, 10, 15 and so on — 288 times per day.

How do I run a cron job every day at 9 AM?

Use `0 9 * * *`. The first `0` sets the minute, the second `9` sets the hour, and the remaining `* * *` match any day of month, any month and any day of week.

What is the difference between day-of-month and day-of-week in cron?

Day-of-month (field 3) matches calendar dates like the 1st or 15th. Day-of-week (field 5) matches named days like Monday. When both are set, most cron implementations run the job when either condition matches.

Can cron expressions include seconds?

Standard 5-field cron has no seconds, but Vixie-style 6-field cron adds seconds as the first field. For example `0 * * * * *` runs at the top of every second.

Build and translate your own cron expression

Use the visual builder to generate any schedule without learning the syntax, or paste an existing expression to see what it really does. Instant plain-English translation, next five run times, and copy-paste snippets.

Open the Cron Generator →