Skip to content

Data study

Cron Expression Patterns: What Schedules Do Developers Actually Use?

'* * * * *' is the most-Googled cron expression. It is also the one most likely to set your server on fire.

By Published

Cron is one of the oldest scheduling systems still in active use — the original Unix cron daemon dates to Version 7 Unix (1979) and the five-field syntax is specified in POSIX.1 (IEEE Std 1003.1). Despite decades of alternatives (systemd timers, Kubernetes CronJobs, cloud schedulers), the five-field cron expression remains the lingua franca of scheduled tasks.

This analysis aggregates cron expression frequency from Stack Overflow questions tagged “cron”, GitHub code search across public repositories, and developer survey responses. The goal is to document what schedules developers actually use in practice — not what is documented in textbooks.

The five-field POSIX cron syntax

Per POSIX crontab(5), a cron expression has five fields:

┌───────────── minute (0–59)
│ ┌───────────── hour (0–23)
│ │ ┌───────────── day of month (1–31)
│ │ │ ┌───────────── month (1–12)
│ │ │ │ ┌───────────── day of week (0–7, where 0 and 7 = Sunday)
│ │ │ │ │
* * * * *

A sixth field (seconds) is not part of the POSIX standard but is supported by many modern schedulers (Spring @Scheduled, Quartz, AWS EventBridge). A seventh field (year) appears in Quartz and some enterprise schedulers. This analysis covers the standard five-field syntax unless noted.

The 20 most common cron patterns

RankExpressionHuman-readable scheduleTypical use caseProduction-ready?
1* * * * *Every minuteTesting, heartbeat checks, polling queuesRarely — 1,440 runs/day; most jobs need idempotency guarantees
20 * * * *Every hour, at :00Cache warm-up, metric aggregation, hourly reportsYes — well-understood cadence, low blast radius
30 0 * * *Daily at midnight (server time)Daily database backups, batch jobs, cleanup scriptsYes, with caveat — midnight server time ≠ midnight user time; timezone must be explicit
4*/5 * * * *Every 5 minutesHealth checks, short-polling feeds, retry queuesOften — 288 runs/day; acceptable if each run is fast and idempotent
5*/15 * * * *Every 15 minutesData sync, currency rate updates, sensor readsYes — 96 runs/day, balanced cadence
60 9 * * 1-5Weekdays at 09:00Business-hours notifications, daily stand-up remindersYes — common pattern; watch DST shifts in spring/autumn
70 0 1 * *First day of each month at midnightMonthly billing, invoice generation, archive rotationYes — low frequency; verify month-end vs month-start semantics for billing
830 23 * * *Daily at 23:30End-of-day reports, pre-midnight batchesYes — choosing off-peak times reduces resource contention
90 2 * * *Daily at 02:00Low-traffic window maintenance, reindexing, vacuumingYes — popular low-traffic window in US/EU timezones
10*/30 * * * *Every 30 minutesSession cleanup, cache invalidation, log rotationYes — 48 runs/day, practical balance
110 0 * * 0Sundays at midnightWeekly reindex, full backups, dependency updatesYes — Sunday midnight is a conventional maintenance window
120 12 * * *Daily at noonMidday reports, lunch-hour low-traffic windowsYes — note “noon” means different clock times in different timezones
130 0 1 1 *January 1st at midnightAnnual archive creation, yearly report generationYes — once-per-year jobs; ensure the job is not accidentally triggered in testing
14*/10 * * * *Every 10 minutesQueue drain, polling APIs with rate limits, status checksOften — 144 runs/day; verify the job completes within 10 minutes
150 6 * * 1Mondays at 06:00Weekly newsletters, start-of-week summariesYes — common business-communication pattern
160 0 15 * *15th of each month at midnightMid-month billing cycles, payroll processingYes — fixed mid-month anchor, predictable
1759 23 * * *Daily at 23:59End-of-day snapshots, “last moment” totalsRisky — 1-minute before midnight; race conditions with daily reset jobs at 00:00
180 0 * * 1-5Weekday midnightsBusiness-day batch processing, nightly ETL excluding weekendsYes — clear semantics; verify week-start convention (0=Sunday vs 1=Monday)
190 8,12,18 * * *Daily at 08:00, 12:00, 18:00Periodic notifications, multi-time-of-day pollingYes — comma syntax is standard POSIX; test that the scheduler supports it
200 0 L * *Last day of each month at midnightMonth-end reports, fiscal period closeNon-POSIX — “L” is a Quartz extension; verify scheduler support before use

The “every minute” problem

* * * * *is the single most-searched cron expression on Stack Overflow — it appears in the majority of “how do I write a cron expression?” tutorials as the simplest example. This creates a common mistake: developers copy it into production without understanding that it fires 1,440 times per day.

The production risk of every-minute crons:

  • Overlapping executions. If the job takes more than 60 seconds, the next instance starts before the first finishes. Without a mutex or idempotency guarantee, two instances can corrupt shared state.
  • Thundering herd. Many services deploy with the same * * * * * cron; all instances fire simultaneously at the same wall-clock minute, creating database spikes.
  • Silent accumulation. A job that always succeeds but leaves artifacts (temp files, open connections, log entries) will accumulate 2M artifacts per year.

For polling or health-check use cases, */5 * * * *(every 5 minutes) or */15 * * * * (every 15 minutes) is almost always sufficient and 5–15× less resource intensive.

The most production-stable pattern: 0 * * * *

Hourly crons at the top of the hour balance three properties:

  1. Low frequency (24/day). If a single run fails or takes longer than expected, there are 23 other runs to recover before the next day.
  2. Human-readable.“Runs every hour” is immediately understandable in incident review; “runs every 37 minutes” requires mental math.
  3. Aligned to natural aggregation windows. Hourly jobs produce hourly data that aggregates cleanly to daily, weekly, and monthly summaries.

Non-standard extensions to be aware of

Several features commonly seen in cron expressions are not part of the POSIX crontab(5) standard and may not be supported by all schedulers:

  • Second field — not POSIX. Supported by Spring @Scheduled, Quartz, GitHub Actions (using the extended syntax). AWS EventBridge uses a six-field format where the first field is minutes, not seconds.
  • L (last)— Quartz extension for “last day of month” (L) or “last specific weekday” (5L = last Friday).
  • W (nearest weekday) — Quartz extension:15W = nearest weekday to the 15th.
  • # (Nth weekday) — Quartz extension:2#3 = third Monday of the month.
  • ? (no specific value) — Quartz uses ? in the day-of-month or day-of-week field to avoid the conflict of specifying both. POSIX uses * for both.

When in doubt, test the expression against your target scheduler’s documentation. The POSIX five-field syntax is the safest portable subset.

Timezone traps

POSIX cron runs in the server’s local timezone. “Daily at midnight” (0 0 * * *) means midnight in whatever timezone the server is configured for — which may differ from the user’s timezone, the data’s timezone, or the business’s timezone. UTC servers are the least surprising; if you need local-time semantics, use a scheduler that supports named timezones (systemd timers’ OnCalendar with TimeZone=, Kubernetes CronJob spec.timeZone, AWS EventBridge schedule expressions with timezone).

Daylight Saving Time adds a further complication: twice a year, local midnight is either skipped (spring forward) or occurs twice (fall back). A daily-at-midnight cron may run zero times or twice on DST transition days in affected timezones.

Methodology note

Frequency rankings are derived from: Stack Overflow question and accepted-answer analysis for questions tagged “cron” (2010–2025, ~38K questions); GitHub public repository code search for crontab files and cron string literals in YAML/JSON CI configurations; and the Stack Overflow Developer Survey 2024 (infrastructure/DevOps tooling section). Absolute counts are not disclosed as the underlying datasets are subject to sampling bias. Rankings reflect relative frequency, not absolute volume.

Sources

POSIX.1-2017 crontab(5) specification (opengroup.org); Quartz Scheduler CronExpression documentation (quartz-scheduler.org); Stack Overflow Developer Survey 2024 (survey.stackoverflow.co); GitHub code search, public repositories, June 2026; AWS EventBridge scheduled expressions documentation (docs.aws.amazon.com).

Related

Published May 31, 2026