Skip to main content

Guide · Text & Dev

How Cron Expressions Work in Plain English

Updated 2026-10-23 · 4 min read

Search is full of "cron expression explained" copy that lists five stars and moves on. Real schedulers fail on field order, day-of-week vs day-of-month, and timezone at runtime. This guide is plain English for the string itself - what each field means - plus when to open ToolComb's Cron Expression Generator to build or sanity-check a line before you paste it into Kubernetes, GitHub Actions, crontab, or a SaaS "schedule" box.

Cron is not a programming language. It is a compact schedule grammar. You are declaring which minutes of which hours on which days in which months and which weekdays a trigger may fire. The daemon still decides overlap, missed runs, and daylight saving behavior.

The five fields left to right

Think: when in the minute, when in the hour, when in the month, which month, which weekday.

FieldAllowed values (typical)Question it answers
Minute0–59At which minute past the hour?
Hour0–23At which hour (24h clock)?
Day of month1–31On which calendar dates?
Month1–12 or JAN–DECIn which months?
Day of week0–7 or SUN–SATOn which weekdays? (0 and 7 often both Sunday)

Example: 30 2 * * 1-5 - 02:30 every weekday (Mon–Fri), any day-of-month, any month. Read it aloud before you ship; if "2" is hour and "30" is minute, that is 2:30 AM, not 30:02.

Cron Expression Generator shows a human-readable preview next to the string so you catch AM/PM and field swap mistakes without waiting for production logs.

Stars, lists, ranges, and steps

* - all values in this field.

, - list: 0 9 * * MON,WED,FRI (if your engine accepts names).

- - range: 1-5 in weekday field = Monday through Friday on many systems.

/ - step: */15 in the minute field = every 15 minutes (0, 15, 30, 45).

Combine carefully: 0 */2 * * * is every two hours at minute 0, not "every two minutes."

The day-of-month vs day-of-week trap

Many beginners set specific day-of-month and specific weekday thinking "AND." Some crons treat them as OR - job runs when either matches. That is how you get unexpected Sunday runs or double fires.

Quartz-style cron uses ? in one of the day fields when the other is constrained: "no specific value here." Vixie crontab on Linux does not use ? - behavior differs.

Rule: read your scheduler's documentation once per platform. GitHub Actions uses five fields with slightly different semantics than crontab -e. AWS EventBridge has six fields including seconds.

Common schedules in English

IntentTypical pattern (verify on your platform)
Every minute* * * * * (often disabled by admins)
Every hour at :000 * * * *
Daily at midnight0 0 * * *
Weekdays 9:00 AM0 9 * * 1-5
First day of month0 0 1 * *
Every 15 minutes*/15 * * * *

Aliases: @daily, @hourly - supported on some tools, not everywhere. For portable infra-as-code, prefer explicit numbers.

Timezones and DST

The cron string does not say UTC or Chicago. The host or job config does. A job at 0 9 * * * in America/Chicago skips or repeats an hour when DST changes - that is OS behavior, not a bug in your five fields.

For global products, standardize on UTC in config and document it in runbooks. Convert for humans in dashboards, not in the cron line unless your platform requires it.

Where cron strings appear

  • Linux crontab - five fields, user context
  • Kubernetes CronJob - five fields, cluster timezone
  • GitHub Actions schedule: - five fields, UTC
  • CI products - check for seconds field or @yearly

ToolComb's generator is for authoring; paste the result into the system that actually executes with rights and secrets.

Workflow: build in the browser, deploy elsewhere

  1. Write the English requirement: "Tuesdays and Thursdays, 6 PM, except December."
  2. Open Cron Expression Generator.
  3. Match fields to the preview sentence.
  4. Cross-check against platform docs (Actions = UTC, etc.).
  5. Store the string in git next to a comment with the English version.

When onboarding asks "what does 0 0/30 8-17 * * 1-5 mean?" - decode field by field using the table above, or regenerate from English in the tool.

What cron does not do

  • Guarantee exactly-once execution (at-least-once is common)
  • Backfill missed runs unless the platform supports misfire policies
  • Replace workflow orchestration (dependencies, retries, DAGs)
  • Encode secrets or command arguments - those live in the job body

For text tooling beyond schedules, see Best free developer text tools.

Hub: Best free developer text tools. Diff and patch workflows for config that includes cron lines: Diff checker vs unified patch.

Read the fields aloud, confirm timezone at deploy time, and treat @daily as sugar you might not have on every host.

Frequently asked questions

What are the five cron fields in order?

Classic Unix cron (Vixie-style): minute, hour, day-of-month, month, day-of-week. Some systems add seconds as a sixth field. Always check your scheduler's docs - Kubernetes, AWS EventBridge, and Quartz use variants.

What does * mean in cron?

Every value in that field. * * * * * is every minute (if your daemon allows that). 0 * * * * is at minute zero of every hour - top of the hour.

Why did my job run twice on Sunday?

Often day-of-month AND day-of-week both match, or you used * in both when you meant OR logic. Some engines require ? in one field when the other is specific (Quartz). Read your platform's rules.

Does cron encode timezone?

Usually no. The string is evaluated in the server's timezone or the timezone you configure on the job (K8s CronJob spec, Lambda, etc.). UTC vs local is a deployment setting, not the five characters in field two.

Can ToolComb run my cron job?

No. Cron Expression Generator helps you author and read expressions locally. Execution happens on your server, CI, or cloud scheduler.

What is @daily vs 0 0 * * *?

Aliases like @daily, @hourly, @weekly are shortcuts some implementations support. They map to fixed five-field forms. Prefer explicit fields when portability matters.

More reading that links back to the same tools and workflows.

RoundupText & Dev

Best Free Developer Text Tools in the Browser

Word counts, diffs, cron, Markdown, slugs, regex replace, SQL format, and JS minify - when to open each ToolComb text tool locally without uploading source.

5 min read

GuideText & Dev

How to Generate URL Slugs for SEO and APIs

Lowercase, hyphens, unicode pitfalls, stable IDs vs readable paths - generate slugs in the browser and pair with case conversion for code identifiers.

4 min read