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.
| Field | Allowed values (typical) | Question it answers |
|---|---|---|
| Minute | 0–59 | At which minute past the hour? |
| Hour | 0–23 | At which hour (24h clock)? |
| Day of month | 1–31 | On which calendar dates? |
| Month | 1–12 or JAN–DEC | In which months? |
| Day of week | 0–7 or SUN–SAT | On 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
| Intent | Typical pattern (verify on your platform) |
|---|---|
| Every minute | * * * * * (often disabled by admins) |
| Every hour at :00 | 0 * * * * |
| Daily at midnight | 0 0 * * * |
| Weekdays 9:00 AM | 0 9 * * 1-5 |
| First day of month | 0 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
- Write the English requirement: "Tuesdays and Thursdays, 6 PM, except December."
- Open Cron Expression Generator.
- Match fields to the preview sentence.
- Cross-check against platform docs (Actions = UTC, etc.).
- 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.
Related reading
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.
Related guides
More reading that links back to the same tools and workflows.
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
Diff Checker vs Unified Patch - Which Output Do You Need?
Side-by-side diffs for humans, unified patch text for git apply and review bots - when to use each ToolComb tool and how to avoid line-ending surprises.
4 min read
Find and Replace with Regex Safely in the Browser
Test patterns first, copy before replace, watch greed and backreferences - bulk edit text locally without uploading files or deleting your backup.
4 min read
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