From every-minute to complex multi-field schedules — 50 cron examples grouped by use case with plain-English explanations. Beginner-friendly with advanced patterns at the end.
A cron expression has 5 space-separated fields. Each field controls a different time unit:
Special characters: * (any), */N (every N), a-b (range), a,b (list), ? (no value, AWS only)
| Expression | Meaning | Use case |
|---|---|---|
| * * * * * | Every minute | Testing only — creates a run every 60 seconds |
| */2 * * * * | Every 2 minutes | Frequent polling, near-real-time checks |
| */5 * * * * | Every 5 minutes | Health checks, queue consumers |
| */10 * * * * | Every 10 minutes | Cache invalidation, status updates |
| */15 * * * * | Every 15 minutes | Data syncs, aggregations |
| */30 * * * * | Every 30 minutes | Half-hourly reports, digest emails |
| 0,30 * * * * | At :00 and :30 of every hour | Same as */30 but more explicit |
| Expression | Meaning | Use case |
|---|---|---|
| 0 * * * * | Every hour on the hour | Hourly aggregations, metric collection |
| 30 * * * * | Every hour at :30 | Offset hourly jobs to spread load |
| 0 */2 * * * | Every 2 hours | Bi-hourly syncs, periodic tasks |
| 0 */4 * * * | Every 4 hours | Runs at 0, 4, 8, 12, 16, 20 |
| 0 */6 * * * | Every 6 hours | Quarter-day jobs |
| 0 0,6,12,18 * * * | At midnight, 6 AM, noon, 6 PM | Same as */6 but explicit times |
| 0 9,17 * * * | At 9 AM and 5 PM | Morning and end-of-day triggers |
| 0 8,12,17 * * * | Three times per day | Morning, noon, evening jobs |
| Expression | Meaning | Use case |
|---|---|---|
| 0 0 * * * | Midnight every day | Daily cleanup, log rotation, snapshots |
| 1 0 * * * | 00:01 every day | After-midnight jobs (1 min offset avoids midnight rush) |
| 0 1 * * * | 1 AM every day | Low-traffic maintenance window |
| 0 2 * * * | 2 AM every day | Database backups, heavy processing |
| 0 6 * * * | 6 AM every day | Early morning pre-warm, report generation |
| 0 9 * * * | 9 AM every day | Daily digest emails, morning jobs |
| 0 12 * * * | Noon every day | Midday jobs, lunch-hour processing |
| 0 17 * * * | 5 PM every day | End-of-business-day triggers |
| 0 23 * * * | 11 PM every day | Late-night jobs, pre-midnight tasks |
| 59 23 * * * | 11:59 PM every day | End-of-day final jobs |
| Expression | Meaning | Use case |
|---|---|---|
| 0 9 * * 1-5 | 9 AM Mon–Fri | Business hours jobs |
| 0 0 * * 1-5 | Midnight Mon–Fri | Nightly jobs, weekdays only |
| */15 9-17 * * 1-5 | Every 15 min, 9–5, weekdays | Business hours processing |
| 0 8 * * 1 | 8 AM every Monday | Weekly kickoff, Monday digest |
| 0 17 * * 5 | 5 PM every Friday | End-of-week reports, weekly archive |
| 0 9 * * 0,6 | 9 AM weekends (Sat & Sun) | Weekend-only jobs |
| 0 0 * * 0 | Midnight Sunday | Weekly reset, weekly archiving |
| 0 0 * * 1 | Midnight Monday | Weekly billing cycle, start-of-week jobs |
| Expression | Meaning | Use case |
|---|---|---|
| 0 0 1 * * | Midnight on the 1st | Monthly billing, subscription renewal |
| 0 0 15 * * | Midnight on the 15th | Mid-month payroll, billing |
| 0 9 1,15 * * | 9 AM on 1st and 15th | Semi-monthly jobs |
| 0 0 1 1 * | Midnight Jan 1st | Annual reset, yearly archive |
| 0 0 1 */3 * | First of every 3rd month | Quarterly jobs |
| 0 0 1 1,4,7,10 * | First of Jan, Apr, Jul, Oct | Explicit quarterly schedule |
| 0 0 28-31 * * | Days 28–31 of every month | Near-end-of-month jobs (be careful — not all months have 31 days) |
| Expression | Meaning | Notes |
|---|---|---|
| 5,35 * * * * | At :05 and :35 past every hour | Twice-hourly with offset |
| 0 9-17 * * 1-5 | Top of each hour, 9 AM–5 PM, weekdays | Business hours hourly job |
| */15 9-17 * * 1-5 | Every 15 min during business hours | Combine step + range for windows |
| 0 0 * * MON#1 | Midnight on the first Monday of the month | # = nth weekday; supported by Quartz/AWS |
| 0 10 * * MON#3 | 10 AM on the third Monday | Monthly team meetings |
| 0 18 * * 5L | 6 PM on the last Friday of the month | L in DOW = last occurrence |
| 0 0 L * * | Midnight on the last day of month | L in DOM = last day |
| 0 9 * 1,6,12 1-5 | 9 AM weekdays in Jan, Jun, Dec only | Combine month list with DOW |
| 0 */3 8-20 * * | Every 3 hours from 8 AM to 8 PM | Runs at 8, 11, 14, 17, 20 |
| 0 0 1-7 * 1 | Monday in the first week of month | First Monday approximation |
# (nth weekday) and L (last) are Quartz extensions, not standard Linux cron. They're supported by AWS EventBridge, Kubernetes (partially), and Quartz schedulers — but not by standard Unix crontab.
0 9 * * 1-5 = 9 AM on weekdays.*/N means "every N units". */15 in minutes = every 15 minutes. */2 in hours = every 2 hours. The * starts from the minimum value and increments by N.1-5 in the day-of-week field. 0 9 * * 1-5 runs at 9 AM Monday through Friday. You can also write MON-FRI on platforms that support named days.0 and 7 represent Sunday in most cron implementations. This is a historical quirk — different systems standardised on different values. Use 0 for maximum compatibility.