Cron Expression Patterns
The 50 most common cron schedules analyzed with English translations, execution frequencies, and real-world use cases.
By Michael Lip · Published April 10, 2026 · zovo.one
Cron expressions are the universal language for scheduling tasks on Unix systems, CI/CD pipelines, and cloud services. Despite their ubiquity, most developers memorize only a handful of patterns and look up the rest. This reference catalogs the 50 most common cron expressions by category, from sub-hourly intervals to complex scheduling patterns.
Cron field order: minute hour day-of-month month day-of-week — each separated by a space. Asterisk (*) = every value, slash (/) = step, comma (,) = list, hyphen (-) = range.
Complete Pattern Reference
| # | Expression | English | Runs/Day | Frequency | Typical Use Case |
|---|---|---|---|---|---|
| 1 | * * * * * | Every minute | 1,440 | Very High | Health checks, queue processing |
| 2 | */5 * * * * | Every 5 minutes | 288 | High | Cache refresh, metric collection |
| 3 | */10 * * * * | Every 10 minutes | 144 | High | API polling, sync jobs |
| 4 | */15 * * * * | Every 15 minutes | 96 | High | Report generation, data aggregation |
| 5 | */30 * * * * | Every 30 minutes | 48 | Medium | Email digest, analytics rollup |
| 6 | 0 * * * * | Every hour (on the hour) | 24 | Medium | Log rotation, hourly reports |
| 7 | 30 * * * * | Every hour at :30 | 24 | Medium | Staggered hourly tasks |
| 8 | 0 */2 * * * | Every 2 hours | 12 | Medium | Data sync, feed updates |
| 9 | 0 */3 * * * | Every 3 hours | 8 | Medium | Batch processing |
| 10 | 0 */4 * * * | Every 4 hours | 6 | Medium | Search index rebuild |
| 11 | 0 */6 * * * | Every 6 hours | 4 | Medium | SSL cert checks, DNS propagation |
| 12 | 0 */8 * * * | Every 8 hours (3x daily) | 3 | Low | Shift-based reports |
| 13 | 0 */12 * * * | Every 12 hours (2x daily) | 2 | Low | Twice-daily digest |
| 14 | 0 0 * * * | Every day at midnight | 1 | Daily | Nightly backups, DB cleanup |
| 15 | 0 6 * * * | Every day at 6 AM | 1 | Daily | Morning reports, pre-market data |
| 16 | 0 9 * * * | Every day at 9 AM | 1 | Daily | Business day start tasks |
| 17 | 0 12 * * * | Every day at noon | 1 | Daily | Midday reports, lunch notifications |
| 18 | 0 17 * * * | Every day at 5 PM | 1 | Daily | End-of-day summary, EOD reports |
| 19 | 0 23 * * * | Every day at 11 PM | 1 | Daily | Pre-midnight cleanup |
| 20 | 30 2 * * * | Every day at 2:30 AM | 1 | Daily | Low-traffic maintenance window |
| 21 | 0 0 * * 0 | Every Sunday at midnight | 1/7 | Weekly | Weekly backups, weekly report |
| 22 | 0 0 * * 1 | Every Monday at midnight | 1/7 | Weekly | Start-of-week analytics |
| 23 | 0 9 * * 1 | Every Monday at 9 AM | 1/7 | Weekly | Weekly standup reminder |
| 24 | 0 0 * * 5 | Every Friday at midnight | 1/7 | Weekly | Friday deploy freeze |
| 25 | 0 17 * * 5 | Every Friday at 5 PM | 1/7 | Weekly | Weekly summary email |
| 26 | 0 0 * * 1-5 | Weekdays at midnight | 5/7 | Weekday | Business-day-only tasks |
| 27 | 0 9 * * 1-5 | Weekdays at 9 AM | 5/7 | Weekday | Business hours monitoring start |
| 28 | */5 9-17 * * 1-5 | Every 5 min, business hours, weekdays | 108 | High | Business-hours-only monitoring |
| 29 | 0 0 * * 6,0 | Weekends at midnight | 2/7 | Weekend | Weekend maintenance window |
| 30 | 0 0 1 * * | First day of every month | 1/mo | Monthly | Monthly billing, invoicing |
| 31 | 0 0 15 * * | 15th of every month | 1/mo | Monthly | Mid-month payroll |
| 32 | 0 0 1 1 * | January 1st at midnight | 1/yr | Annual | Annual data archival |
| 33 | 0 0 1 */3 * | Every quarter (1st day) | 4/yr | Quarterly | Quarterly reports |
| 34 | 0 0 1 */6 * | Every 6 months (Jan & Jul 1st) | 2/yr | Semi-Annual | Semi-annual audit |
| 35 | 0 0 1,15 * * | 1st and 15th of every month | 2/mo | Bi-Monthly | Bi-monthly payroll |
| 36 | 0 0,12 * * * | Midnight and noon | 2 | Low | Twice-daily sync |
| 37 | 0 8,20 * * * | 8 AM and 8 PM | 2 | Low | Morning/evening alerts |
| 38 | 0 0 * * 1,3,5 | Mon, Wed, Fri at midnight | 3/7 | Low | Alternating-day backups |
| 39 | 0 2 * * 0 | Sunday at 2 AM | 1/7 | Weekly | Full weekly backup (low traffic) |
| 40 | 0 3 1 * * | 1st of month at 3 AM | 1/mo | Monthly | Monthly DB optimization |
| 41 | */2 * * * * | Every 2 minutes | 720 | Very High | Near-realtime monitoring |
| 42 | */3 * * * * | Every 3 minutes | 480 | Very High | Queue drain frequency |
| 43 | 0 4 * * * | Every day at 4 AM | 1 | Daily | ETL pipeline, data warehouse load |
| 44 | 15 14 1 * * | 1st of month at 2:15 PM | 1/mo | Monthly | Monthly status report |
| 45 | 0 22 * * 1-5 | Weekdays at 10 PM | 5/7 | Weekday | Nightly test suite |
| 46 | 0 0 * * 2,4 | Tuesdays and Thursdays at midnight | 2/7 | Low | Bi-weekly deployments |
| 47 | 5 4 * * 0 | Sunday at 4:05 AM | 1/7 | Weekly | Avoid midnight exact (reduce contention) |
| 48 | 0 1 * * * | Every day at 1 AM | 1 | Daily | Nightly cleanup, log archival |
| 49 | 0 0 * 1,4,7,10 * | First day of each quarter | 4/yr | Quarterly | Quarterly compliance scan |
| 50 | @reboot | Once at system startup | N/A | Boot | Start daemons, mount drives |
Community Questions from Stack Overflow
Real cron questions from developers, sourced from the Stack Overflow API (sorted by votes):
Methodology
Patterns were selected based on frequency of appearance in:
- Stack Overflow questions — fetched via
api.stackexchange.com/2.3/search?intitle=cronon April 10, 2026 - GitHub code search — frequency of cron expressions in crontab files, CI/CD configs (GitHub Actions, GitLab CI), and Kubernetes CronJob manifests
- Official documentation — crontab(5) man page, AWS EventBridge, Google Cloud Scheduler, Azure Logic Apps scheduling documentation
Execution frequencies assume UTC timezone. Actual run counts may vary with timezone and DST transitions. The @reboot special string is non-standard but widely supported.
Frequently Asked Questions
What does * * * * * mean in cron?
The cron expression '* * * * *' means 'every minute'. Each asterisk represents a field: minute (0-59), hour (0-23), day of month (1-31), month (1-12), and day of week (0-7). An asterisk means 'every possible value' for that field. This is the most frequent possible cron schedule and runs 1,440 times per day.
How do I run a cron job every 5 minutes?
Use '*/5 * * * *' to run a cron job every 5 minutes. The */5 in the minute field means 'every 5th minute' (0, 5, 10, 15, ..., 55). This runs 288 times per day. Alternative patterns: '0,5,10,15,20,25,30,35,40,45,50,55 * * * *' is equivalent but more verbose. For every 5 minutes during business hours only: '*/5 9-17 * * 1-5'.
What is the difference between cron and crontab?
Cron is the scheduling daemon (background service) that executes scheduled commands. Crontab (cron table) is the file or command used to create, edit, and manage the schedule entries. You edit your crontab with 'crontab -e' and list entries with 'crontab -l'. The cron daemon reads all crontab files and executes commands at their scheduled times.
Can I run a cron job every 30 seconds?
Standard cron does not support sub-minute intervals — the smallest unit is one minute. To run every 30 seconds, use two cron entries: '* * * * * /path/to/script' and '* * * * * sleep 30 && /path/to/script'. Alternatively, use systemd timers (OnUnitActiveSec=30s) or a process manager like supervisord.
How do I schedule a cron job for the last day of every month?
There is no direct 'last day of month' syntax in standard cron. The most reliable approach is: '59 23 28-31 * * [ $(date -d tomorrow +%d) -eq 1 ] && /path/to/script'. This checks if tomorrow is the 1st (meaning today is the last day). Some cron implementations like Quartz support 'L' for last day: '0 0 L * ?'.
Related Tools
Free to use under CC BY 4.0 license. Cite this page when sharing.