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.
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.
| Pos | Field | Range | Example | Meaning |
|---|---|---|---|---|
| 1 | Minute | 0–59 | `30` runs at minute 30 | The minute of the hour |
| 2 | Hour | 0–23 | `9` runs at 9 AM | The hour of the day (24-hour clock) |
| 3 | Day of month | 1–31 | `1` runs on the 1st | The day of the month |
| 4 | Month | 1–12 | `6` runs in June | The month (or JAN–DEC) |
| 5 | Day of week | 0–7 | `0` runs on Sunday | Day 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:
| Char | Name | Example | Meaning |
|---|---|---|---|
| * | 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 |
| L | Last | `0 0 L * *` | Last day of the month |
| W | Weekday | `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
Every 2 minutes
*/2 * * * *Trigger a task every two minutes for near real-time automation.
Every 5 minutes
*/5 * * * *The classic monitoring and sync interval — run every 5 minutes, 288 times a day.
Every 10 minutes
*/10 * * * *Execute a cron job every 10 minutes for periodic data refresh.
Every 15 minutes
*/15 * * * *Run a job every 15 minutes for heartbeat checks and queues.
Every 20 minutes
*/20 * * * *Schedule a task to run every 20 minutes, 72 times each day.
Every 30 minutes
*/30 * * * *Run a cron job every half hour for consistent background processing.
Every 2 hours
0 */2 * * *Run a job every two hours on the even hours.
Every 3 hours
0 */3 * * *Execute a task every three hours around the clock.
Every 4 hours
0 */4 * * *Run a cron job every four hours for periodic maintenance.
Every 6 hours
0 */6 * * *Schedule a task every six hours, four times per day.
Every 8 hours
0 */8 * * *Run a job every eight hours, three times a day.
Every 12 hours
0 */12 * * *Trigger a task twice a day, every twelve hours.
Daily jobs: rollups, backups and off-peak processing
Every day at midnight
0 0 * * *Run a job at 12:00 AM every day for daily rollups and resets.
Every day at 1 AM
0 1 * * *Execute a cron job at 1:00 AM daily for off-peak processing.
Every day at 2 AM
0 2 * * *Run a task at 2:00 AM each day for nightly maintenance windows.
Every day at 6 AM
0 6 * * *Schedule a job at 6:00 AM daily to start the day on time.
Every day at 7 AM
0 7 * * *Run a cron job at 7:00 AM every day.
Every day at 8 AM
0 8 * * *Trigger a task at 8:00 AM daily for morning workflows.
Every day at 9 AM
0 9 * * *Run a job at 9:00 AM every day, a common office-hours start time.
Every day at 10 AM
0 10 * * *Execute a cron expression at 10:00 AM daily.
Every day at noon
0 12 * * *Run a task every day at 12:00 PM for midday reports.
Every day at 1 PM
0 13 * * *Schedule a job at 1:00 PM daily for afternoon processing.
Every day at 3 PM
0 15 * * *Run a cron job at 3:00 PM every day.
Every day at 5 PM
0 17 * * *Trigger a task at 5:00 PM daily for end-of-day jobs.
Every day at 6 PM
0 18 * * *Run a job at 6:00 PM each day for evening automation.
Every day at 8 PM
0 20 * * *Execute a cron schedule at 8:00 PM daily.
Every 2 days
0 0 */2 * *Run a job at midnight every other day.
Every 3 days
0 0 */3 * *Schedule a task at midnight every three days.
Weekly jobs: reports and weekday automation
Every Monday
0 0 * * 1Run a task at midnight every Monday for weekly resets.
Every Monday at 9 AM
0 9 * * 1Trigger a weekly job every Monday at 9:00 AM.
Every Tuesday at 9 AM
0 9 * * 2Run a cron job every Tuesday at 9:00 AM.
Every Wednesday at 9 AM
0 9 * * 3Execute a task every Wednesday at 9:00 AM.
Every Thursday at 9 AM
0 9 * * 4Schedule a job every Thursday at 9:00 AM.
Every Friday at 9 AM
0 9 * * 5Run a cron expression every Friday at 9:00 AM.
Every Saturday at 9 AM
0 9 * * 6Trigger a task every Saturday at 9:00 AM for weekend jobs.
Every Sunday at 9 AM
0 9 * * 0Run a job every Sunday at 9:00 AM.
Every weekday
0 0 * * 1-5Run a task at midnight Monday through Friday.
Every weekday at 9 AM
0 9 * * 1-5Execute a job Monday to Friday at 9:00 AM.
Every weekend
0 0 * * 6,0Schedule a task at midnight on Saturday and Sunday.
Every weekend at 9 AM
0 9 * * 6,0Run a cron job every Saturday and Sunday at 9:00 AM.
Monthly & yearly jobs: billing, archives and maintenance
on the first day of the month
0 0 1 * *Run a task at midnight on the 1st of every month for monthly billing and reports.
on the first day of the month at noon
0 12 1 * *Trigger a monthly job at noon on the 1st of each month.
on the last day of the month
0 0 L * *Run a job at midnight on the last calendar day of every month.
Every quarter
0 0 1 */3 *Schedule a task on the 1st of January, April, July and October.
Every 6 months
0 0 1 */6 *Run a job on the 1st of January and July each year.
Every year
0 0 1 1 *Run a task at midnight on January 1st each year.
Every second (6-field)
0 * * * * *A 6-field Vixie cron example showing seconds support.
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 * 1means 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 →