Skip to content

Cron Expression Tester · Scheduling

Read any cron expression at a glance.

Paste a crontab line like */15 9-17 * * 1-5 to get a plain-English explanation of what it does plus the next run times — entirely in your browser, free, no signup.

Runs in your browser No signup Free & open Updated Jul 22, 2026

Cron Expression Tester playground

Five fields — minute, hour, day of month, month, day of week. Macros like @daily are supported too.

Result

Type a cron expression or pick an example to see a plain-English description and the next run times here.

Verify an AI's answer

Paste what ChatGPT or Claude told you — this recomputes it exactly, locally. Why AI needs checking →

Claim 1
Claim 2
Claim 3

Enter a cron expression above, then paste in what an AI told you to check it.

The Gap

Five fields, a hundred ways to misread them.

Cron’s syntax is famously terse. The difference between */5 and 5, or between a job that runs once a day and one that runs every minute of a day, is a single character — and the classic day-of-month / day-of-week OR rule trips up even seasoned engineers. A typo here doesn’t throw an error; it just silently runs at the wrong time.

This tester converts any cron expression to plain English — a human-readable sentence you can actually verify — then shows the next run times so the schedule is concrete rather than abstract. It’s the quick sanity check that belongs between writing a crontab line and shipping it — entirely in the browser, with nothing to install.

It’s also the antidote to asking an AI: the day-of-month / day-of-week OR rule trips language models constantly, so a schedule that reads plausibly can fire on the wrong days. This tester applies real cron semantics and shows the actual next fire times — ground truth you can check any AI-suggested crontab line against.

New to the format? Jump to the syntax or try the live playground above.

The Pipeline

How it works.

Four deterministic steps run end-to-end on every keystroke — all inside your browser tab, every time.

  1. Tokenize the line.

    Your expression is split into its five fields — or expanded from an @macro such as @daily — exactly the way cron reads it.

  2. Parse each field.

    Every field is decoded into the set of values it matches: ranges, steps, lists and named months or weekdays all resolve to concrete numbers.

  3. Describe in English.

    The matched sets are composed into a readable sentence, including the day-of-month / day-of-week OR rule when both are restricted.

  4. Project the next runs.

    Starting from now in your time zone, the schedule is walked forward to list the next times it will fire.

Cron Syntax

Five fields, a few operators.

A standard crontab line is five space-separated fields, read left to right. Each accepts the same small set of operators, and a handful of @macros stand in for the most common schedules.

The five fields

Minute, hour, day of month, month and day of week — in that order. A * means “every value” for that field.

crontab
┌───────────── minute        (0 - 59)
│ ┌─────────── hour          (0 - 23)
│ │ ┌───────── day of month  (1 - 31)
│ │ │ ┌─────── month         (1 - 12)
│ │ │ │ ┌───── day of week    (0 - 7)
│ │ │ │ │
*/15 9-17 * * 1-5
Minute
0–59
Hour
0–23
Day of month
1–31
Month
1–12 or JAN–DEC
Day of week
0–7 or SUN–SAT

Operators & macros

Ranges, steps, lists and names combine inside any field. The @macros are exact shorthands — each expands to a plain five-field line.

operators
# Operators, by example
*        every value           (every minute, every hour, …)
5        a single value        (at minute 5)
1-5      a range               (Monday through Friday)
*/15     a step over a range   (every 15th minute)
0,30     a list                (on the hour and the half hour)
MON-FRI  named weekdays        (same as 1-5)
macros
@yearly    →  0 0 1 1 *     once a year, at midnight on Jan 1
@monthly   →  0 0 1 * *     once a month, at midnight on the 1st
@weekly    →  0 0 * * 0     once a week, at midnight on Sunday
@daily     →  0 0 * * *     once a day, at midnight
@hourly    →  0 * * * *     once an hour, at minute 0

Next Step

Moving off crontab? Convert it to a systemd timer.

Once a schedule reads correctly here, the Cron to systemd Converter turns the same line into an equivalent .timer and .service unit — with an OnCalendar expression and migration notes so the behavior carries over cleanly.

backup.timer
[Timer]
# from:  */15 9-17 * * 1-5
OnCalendar=Mon..Fri *-*-* 09..17:00/15
Persistent=true

FAQ

Questions, answered.

Tap a question to expand the answer.

It's a free, browser-based tool that reads any crontab-style cron expression, translates it into a plain-English description, and computes the next handful of times it will fire. Paste a line like “*/15 9-17 * * 1-5”, and you instantly see “Every 15 minutes, between 09:00 and 17:00, Monday through Friday” plus the upcoming run timestamps — no signup, no server round-trip.

No. Parsing, the English explanation, and the next-run calculation all happen client-side in your tab. Nothing is uploaded to a server, there's no account, and there's no logging. You can safely paste schedules from internal or sensitive systems.

The standard five-field crontab format — minute, hour, day-of-month, month, day-of-week — including ranges (1-5), steps (*/15), lists (1,15,30), names (JAN, MON), and the common @macros (@hourly, @daily, @weekly, @monthly, @yearly, @midnight). Vendor-specific extensions such as seconds fields or “L”/”W”/”#” qualifiers are not part of the classic crontab spec and are flagged rather than silently guessed.

From the current time in your selected time zone, the tester walks the schedule forward field by field and lists the next occurrences. Because everything runs locally, the timestamps reflect your machine's clock — handy for sanity-checking a schedule before you commit it to a server whose time zone may differ.

Classic cron treats day-of-month and day-of-week as an OR when both are restricted: the job runs when either field matches, not only when both do. It's a well-known footgun. The tester makes this explicit in the English description so a “0 0 13 * 5” style line doesn't surprise you in production.

Yes — once a schedule reads correctly here, head to the Cron to systemd Converter to generate an equivalent .timer and .service unit with an OnCalendar expression and migration notes. The two tools are designed to be used back to back.

The “*/5” step expression in the minute field means “every 5th minute”, so the job fires at minutes 0, 5, 10, 15 … 55 of every hour — effectively every 5 minutes around the clock. The same step pattern applies to other fields: “*/15” in the minute field fires every 15 minutes at :00, :15, :30, and :45. Paste the expression into the tester to get the human-readable description and the next upcoming run times instantly.

Macros are shorthand aliases that start with “@”. The tester supports @hourly (0 * * * *), @daily and @midnight (both 0 0 * * *), @weekly (0 0 * * 0), @monthly (0 0 1 * *), @yearly and @annually (both 0 0 1 1 *), and @reboot (once at daemon startup, no recurring fire times). Each macro expands to its equivalent five-field expression before being parsed, so the plain-English description and next-run output reflect the full expanded schedule.

Paste any standard 5-field cron expression and the tester checks that it has the correct number of fields and that every value falls within its valid range — minute 0-59, hour 0-23, day-of-month 1-31, month 1-12, day-of-week 0-7. If the syntax is valid it shows the plain-English meaning and the next run times; if a field is out of range or malformed, the error message identifies the offending field so you can fix it. No account is required and nothing leaves your browser.

More free, private DevOps tools.

The Cron Expression Tester is one tool in OpsCanopy — a growing canopy of browser-based validators, converters and testers that never touch a server.

New to Linux?  Read the Linux guide →

29 free tools, every one offline-capable — opscanopy.com works with no signup and nothing uploaded.

Scheduling on Linux? Pair this with the Cron to systemd Converter, or browse the full tools directory.

Not affiliated with or endorsed by any cron implementation. Format names are used only to describe what this tool reads. OpsCanopy is free and open.