Cron schedule cheatsheet: 50 patterns with explanations
Copy-paste cron expressions for every common cadence — every minute, every night, every weekday, every quarter, business hours only, and 45 more.
Copy-paste any of these and drop into crontab -e. Paste any one into our Cron Explainer to double-check in plain English before shipping.
# By frequency
| Expression | Meaning |
|---|---|
| * | Every minute |
| /2 * | Every 2 minutes |
| /5 * | Every 5 minutes |
| /10 * | Every 10 minutes |
| /15 * | Every 15 minutes |
| /30 * | Every 30 minutes |
| 0 | Every hour, on the hour |
| 30 | Every hour, at :30 |
| 0 /2 | Every 2 hours |
| 0 /4 | Every 4 hours |
| 0 /6 | Every 6 hours |
| 0 /8 | Every 8 hours |
| 0 /12 | Every 12 hours |
# Daily
| Expression | Meaning |
|---|---|
| 0 0 * | Every day at midnight |
| 0 6 * | Every day at 6am |
| 0 9 * | Every day at 9am |
| 30 14 * | Every day at 2:30pm |
| 0 20 * | Every day at 8pm |
| 0 23 * | Every day at 11pm |
# Weekdays / weekends
| Expression | Meaning |
|---|---|
| 0 9 1-5 | 9am every weekday |
| 0 18 1-5 | 6pm every weekday (end-of-day reports) |
| 0 9-17 1-5 | Every hour 9am–5pm, weekdays |
| 0 0 6,0 | Midnight Saturday and Sunday |
| 0 10 6 | 10am every Saturday |
# Weekly
| Expression | Meaning |
|---|---|
| 0 0 0 | Midnight every Sunday |
| 0 0 1 | Midnight every Monday (ISO week start) |
| 0 9 1 | 9am every Monday |
| 0 16 5 | 4pm every Friday (end-of-week) |
# Monthly / quarterly
| Expression | Meaning |
|---|---|
| 0 0 1 | Midnight on the 1st of every month |
| 0 0 15 | Midnight on the 15th of every month |
| 0 0 L | Last day of month (Quartz cron only) |
| 0 0 1 /3 | Midnight on the 1st of every 3rd month (quarterly) |
| 0 0 1 1,4,7,10 * | Midnight on the 1st of Jan, Apr, Jul, Oct |
# Yearly
| Expression | Meaning |
|---|---|
| 0 0 1 1 * | Midnight on Jan 1 |
| 0 0 1 7 * | Midnight on Jul 1 |
| @yearly | Same as 0 0 1 1 * |
| @annually | Same as @yearly |
# Specials (Vixie cron)
| Expression | Meaning |
|---|---|
| @reboot | At system startup |
| @yearly / @annually | Once a year, at midnight Jan 1 |
| @monthly | Once a month, at midnight on the 1st |
| @weekly | Once a week, midnight Sunday |
| @daily / @midnight | Once a day, at midnight |
| @hourly | Once an hour, on the hour |
# Odd ones that come up
| Expression | Meaning |
|---|---|
| /5 9-17 * 1-5 | Every 5 min during business hours, weekdays |
| 0 0 1,15 | Midnight on the 1st and 15th (payroll) |
| 0 22 1-5 | 10pm weeknights (overnight batch) |
| 0 3 0 | 3am every Sunday (weekly maintenance window) |
| /30 8-18 * 1-5 | Every half hour, 8am–6pm, weekdays |
| 0 0 29 2 * | Midnight on Feb 29 (runs every 4 years) |
<div class="callout callout-warning" role="note"><div class="callout-title">Warning</div><div class="callout-body"><p>Cron schedules can silently drift if you deploy across timezones. If a 9am UTC job needs to run at 9am London time, the shift to BST (British Summer Time) in March moves it to 10am local. Run cron in UTC and let callers handle display timezones.</p></div></div>
# Before you commit
1. Paste into our Cron Explainer and confirm the English matches your intent.
2. Run crontab -l to see current jobs.
3. Redirect stdout + stderr: >> /var/log/mything.log 2>&1 — silent cron jobs are invisible cron jobs.
4. Use absolute paths — cron's PATH is minimal.
# Related posts
Frequently asked questions
›Can I schedule something every 15 seconds?
Not with classic Unix cron — its resolution is one minute. For sub-minute schedules, use systemd timers (`AccuracySec=1s`), Kubernetes CronJobs with a sidecar loop, or a proper scheduler like Temporal.
›Does `0 0 * * *` run at midnight UTC or local time?
Cron uses the system timezone. On most Linux hosts that's whatever `/etc/localtime` points at. On Docker containers, usually UTC unless you mount the host's TZ.