Overview
Introduction
A pasted cron line like "0 9 * * 1-5" is fast to write once you know the syntax, but slow to read back, especially months later or in someone else's script where the schedule intent isn't obvious at a glance.
This tool parses the five standard cron fields and turns them into a plain-English sentence describing exactly when the job runs, so reviewing or auditing an existing crontab doesn't require mentally re-deriving each field.
What Is Crontab Expression Explainer?
A cron expression parser and natural-language explainer covering all five standard fields (minute, hour, day of month, month, day of week), including wildcards, lists, ranges, step values, and month/day names.
It recognizes common shorthand patterns, every minute, every N minutes, hourly, a specific daily time, weekday-only or weekend-only schedules, and a fixed monthly date, and phrases those naturally, falling back to a more literal per-field description for unusual combinations.
How Crontab Expression Explainer Works
Each of the five fields is split on commas into individual parts, and each part is parsed as a wildcard, a single value, a range, or a stepped variant of either, with month and day-of-week names resolved to their numeric equivalents and validated against that field's valid range.
The minute and hour fields are combined first into a time phrase (recognizing the every-minute, every-N-minutes, specific-time, and hourly-at-a-given-minute shapes specially), then day-of-month, day-of-week, and month restrictions are appended as additional clauses only when they're not left as a wildcard, including cron's day-of-month/day-of-week OR quirk when both are restricted at once.
When To Use Crontab Expression Explainer
Use it when reviewing an unfamiliar crontab or a script's embedded cron line and you want a quick, reliable read on exactly when it fires, without mentally parsing five terse fields.
It's also useful when documenting a scheduled job (in a README, runbook, or PR description) and you want an accurate plain-English description rather than writing one by hand and risking a mismatch with the actual schedule.
Often used alongside Crontab Generator and systemd Service Generator.
Features
Advantages
- Validates every field's values against cron's real ranges (0-59 for minutes, 1-31 for day of month, etc.), catching an out-of-range value that would otherwise install silently and either fail or run at an unintended time.
- Accepts month and day-of-week names (JAN-DEC, SUN-SAT) as well as numbers, matching what real-world crontabs actually contain.
- Explicitly calls out cron's day-of-month/day-of-week OR-interaction instead of silently describing only one of the two restrictions.
Limitations
- Only supports the standard 5-field format; a 6-field expression with a seconds field (as used by some non-cron schedulers) is rejected rather than guessed at.
- Phrasing for unusual combinations, like a list mixing a stepped range with individual values, falls back to a more literal field-by-field description rather than fully natural prose.
- It describes the schedule's meaning, not its real-world effect. It can't tell you whether the job's command itself will succeed or how long it takes to run.
Examples
Best Practices & Notes
Best Practices
- Paste the exact line from the crontab, including the schedule fields only (not the trailing command), for the most reliable parse.
- When a schedule uses both day-of-month and day-of-week restrictions, read the explanation's "or" clause carefully. It's easy to assume cron means "and" when it actually means "either."
- Cross-check an explanation against the companion Crontab Generator when building a new schedule from scratch, since one builds a line and the other reads one back, and they should agree.
Developer Notes
The parser resolves each comma-separated field part into one of six shapes: a bare wildcard, a stepped wildcard (*/N), a single value, a range (A-B), a stepped range (A-B/N), or a stepped single value (A/N, an uncommon but valid Vixie cron extension meaning "start at A, then every N units"). Day-of-week accepts both 0 and 7 for Sunday, normalizing 7 to 0 before building the description. Common shapes (every minute, every N minutes, a specific HH:MM time, hourly at a given minute) get dedicated natural-language phrasing in the time-of-day builder; everything else falls back to a literal per-atom join so the description never silently misrepresents an unusual expression.
Crontab Expression Explainer Use Cases
- Auditing an existing server's crontab to confirm each job runs on the schedule its comment or documentation claims
- Understanding a cron line pasted into a support ticket, Slack message, or ops runbook without manually working through each field
- Generating an accurate plain-English schedule description for documentation or a PR description that adds a new scheduled job
Common Mistakes
- Assuming a comma between day-of-month and day-of-week restrictions means "and," when cron's actual behavior is "or" once both fields are restricted away from *.
- Misreading day-of-week 0 as Monday instead of Sunday. Cron's day-of-week numbering starts at 0 for Sunday, not 1.
- Overlooking that a stepped range like 10-30/5 doesn't mean "every 5 minutes forever," it's scoped to only the 10-30 window within whatever the field's full range is.
Tips
- If the explanation falls back to a literal per-field description, the expression is likely combining several syntax features in a single field. Consider whether a simpler, equivalent expression exists.
- Pair this tool with the Crontab Generator when converting a legacy cron line into presets plus flock locking and log redirection.