Top 10 Cron Schedule Patterns Every Developer Should Know
Most scheduling needs in production fall into a handful of recurring patterns. Rather than reaching for the cron man page every time, bookmark this cheat sheet. Each pattern below includes the expression, what it means, the most common use case, and a practical tip. You can use these with standard Unix crontab, GitHub Actions, node-cron, and most other schedulers.
1. Every minute — health checks & polling
* * * * *
Use case: Polling an external API, lightweight health checks, queue processing ticks.
💡 Every-minute crons add up. Make sure the job completes in under 60 seconds to avoid overlap.
2. Every 5 minutes — rate-limited tasks
*/5 * * * *
Use case: Syncing data with an external service, sending queued emails, scraping feeds.
💡 The step syntax */5 means "every 5 units". */10, */15, */30 work the same way.
3. Every hour on the hour
0 * * * *
Use case: Generating hourly reports, aggregating metrics, rotating log files.
💡 The leading 0 means "at minute 0". Without it (*/60 is invalid), this is the correct form.
4. Every day at midnight
0 0 * * *
Use case: Daily backups, clearing expired sessions, resetting daily quotas.
💡 All times in cron are local server time (or UTC for cloud schedulers). Verify your timezone.
5. Every weekday at 9 AM
0 9 * * 1-5
Use case: Business-hours jobs: sending morning digest emails, triggering daily standups, running payroll.
💡 1=Monday, 5=Friday. Use 0 or 7 for Sunday depending on your system.
6. Every Monday at 8 AM — weekly tasks
0 8 * * 1
Use case: Weekly summary emails, cache warm-ups before the working week, dependency audits.
💡 Change 1 to 0 for Sunday, 5 for Friday, 6 for Saturday.
7. First day of every month at midnight
0 0 1 * *
Use case: Monthly billing runs, generating monthly invoices, archiving the previous month's data.
💡 For the last day of the month, cron has no native "last" keyword — use day 28 as a safe fallback, or handle it in your script.
8. Multiple specific hours — morning, noon, evening
0 8,12,18 * * *
Use case: Sending reminder notifications at set times, updating dashboards, running health checks at key intervals.
💡 Comma-separated values in any field mean "run at each of these". You can combine this with day-of-week filters.
9. Every 15 minutes during business hours
*/15 9-17 * * 1-5
Use case: Sending intra-day alerts, syncing data during working hours only, refreshing an internal dashboard.
💡 Combining step (*/15), range (9-17), and list (1-5) fields in a single expression is where cron really shines.
10. Once a year — annual tasks
0 0 1 1 *
Use case: Archiving the previous year's data, generating annual compliance reports, rotating long-lived API keys.
💡 January 1st at midnight. Test this one with a manual trigger before relying on it.
Quick cron field reference
* * * * * │ │ │ │ └── day of week (0–6, 0=Sunday) │ │ │ └──── month (1–12) │ │ └────── day of month (1–31) │ └──────── hour (0–23) └────────── minute (0–59) Special chars: *=any ,=list -=range /=step
Generate any cron expression from plain English
Can't remember the exact field order? Use the Dev Brains AI Cron Expression Generator — describe your schedule in plain English and get the correct cron string with a field-by-field breakdown.