Free · no signup

Cron Expression Explainer

Paste a cron expression and get plain English plus the next 10 run times — in your timezone, daylight-saving handled.
minute · hour · day-of-month · month · day-of-week — @aliases like @daily work too
*/5 * * * * UTC
At every 5th minute

Next 10 runs UTC

# Run time Relative
1 UTC in 2 minutes
2 UTC in 7 minutes
3 UTC in 12 minutes
4 UTC in 17 minutes
5 UTC in 22 minutes
6 UTC in 27 minutes
7 UTC in 32 minutes
8 UTC in 37 minutes
9 UTC in 42 minutes
10 UTC in 47 minutes
Share this result

Reading a cron expression

A cron expression is five fields, left to right: minute (0–59), hour (0–23), day-of-month (1–31), month (1–12 or JAN–DEC) and day-of-week (0–7 or SUN–SAT — 0 and 7 are both Sunday). A * means "every value"; a list (1,15) picks several; a range (9-17) picks a span; and a step (*/5, 9-17/2) picks every Nth value. Put together, 0 3 * * 1-5 reads "at 03:00 on Monday through Friday" and */5 * * * * is simply "every 5 minutes".
The one rule that trips up nearly everyone is the day-of-month / day-of-week OR. When both fields are restricted, standard (Vixie) cron runs the job when either matches: 0 0 1 * MON fires on the 1st of every month and on every Monday — not just on Mondays that happen to be the 1st. If either field is *, only the other constrains the day. This explainer flags the OR case whenever your expression triggers it, because a job that quietly runs four extra times a month is exactly the kind of surprise you want to catch on this page rather than in production.
Two smaller gotchas worth knowing. Shortcuts like @daily and @hourly are fine — they expand to plain five-field schedules — but @reboot has no schedule at all, and 6-field expressions with a leading seconds field belong to Quartz or systemd timers, not crontab. And daylight-saving time can genuinely skip or repeat a wall-clock hour: a job at 02:30 simply doesn’t run on the night clocks spring forward, which is why the run times above are computed in your timezone rather than naively added in UTC.
Here is the uncomfortable part: even a perfect expression tells you nothing about whether the job ran. Cron fails silently — a broken PATH, an expired credential, a full disk or a server that never came back from a reboot, and the backup you thought was running nightly quietly stopped months ago. We wrote up why cron jobs fail silently and how to catch it; the short version is to give this job a heartbeat — it pings a unique URL on success, and CompleteStatus alerts you the moment a ping goes missing. Set one up free — it takes about a minute, which is less time than you just spent decoding the expression.

Frequently asked questions

In order: minute (0-59), hour (0-23), day-of-month (1-31), month (1-12 or JAN-DEC) and day-of-week (0-7 or SUN-SAT, where both 0 and 7 are Sunday). A * means "every value", so */5 * * * * runs every five minutes and 0 3 * * 1-5 runs at 03:00 on weekdays.

It is a step: "every 5th value" of that field. In the minute field, */5 fires at minute 0, 5, 10 … 55. Steps also work on ranges — 9-17/2 in the hour field means every 2nd hour from 9 through 17 (9, 11, 13, 15, 17).

Because standard (Vixie) cron ORs those two fields when both are restricted: 0 0 1 * MON runs on the 1st of every month AND on every Monday — not only on Mondays that fall on the 1st. If either field is *, only the other one constrains the day. This tool flags the OR case whenever it applies.

Not in standard cron. A leading seconds field (and a trailing years field) are Quartz and systemd-timer extensions — a classic crontab will refuse them. If you have a 6-field expression, drop the first field to get the standard 5-field equivalent.

You usually don’t — cron fails silently: a bad PATH, an expired credential or a full disk stops the job and nothing tells you. The reliable fix is a heartbeat monitor: the job pings a unique URL on success, and CompleteStatus alerts you when the ping doesn’t arrive on schedule.

Don’t check it once — watch it 24/7

A cron job that silently stops is invisible until something breaks downstream. CompleteStatus runs this exact check around the clock and alerts you the moment something changes — before your users (or attackers) notice.
Monitor this free Try the other free tools
Uptime is table stakes. We watch the rest — security headers, email authentication, certs and DNS, with the fix attached.
Start free
Company
© 2026 CompleteStatus. All rights reserved. CompleteStatus — operated in the United States · support@completestatus.com