Cron Expression Builder & Explainer
Paste a cron expression to read it in plain English and see the next run times, or build one from simple choices.
Build an expression
Expression: 30 2 * * *
Explain an expression
Result
| Meaning | Every 15 minutes. |
|---|---|
| Minute | */15 |
| Hour | * |
| Day of month | * |
| Month | * |
| Day of week | * |
| Next runs | Calculating... |
Note: Follows classic Vixie cron and cronie (most Linux distributions). Next runs use your browser time zone; the server runs cron in its own time zone (or CRON_TZ). In a crontab line, a % in the command means a new line, so write \% for a literal percent sign.
Learn more
How it works
A cron expression has five fields: minute (0-59), hour (0-23), day of month (1-31), month (1-12 or JAN-DEC) and day of week (0-7, where 0 and 7 are both Sunday, or SUN-SAT). Each field takes *, a number, a range like 1-5, a list like 1,15, or a step like */15 or 9-17/2.
The rules match cronie and Vixie cron, the versions most Linux systems use, checked against cronie's parser. Things other schedulers accept are rejected here rather than guessed: seconds or year fields, ?, L, W, #, a step without a range like 5/10, and cronie's random ~.
The two day fields have a special rule. If both are restricted, the job runs when either matches. If either field starts with * (including */2), both must match. The crontab(5) manual describes the either-match case.
Daylight saving: cronie's man page says skipped times never run, but its source code runs a fixed-time job (minute and hour both specific) right after the clock jumps forward, and does not repeat it when the clock falls back. Jobs with * or a step in the minute or hour field skip the missing hour and run again in the repeated hour. The next-run list follows the source code.
Worked example
30 4 1,15 * 5 restricts both day fields, so the either rule applies: it runs at 4:30 AM on the 1st and 15th of every month, and also every Friday. Starting Thursday, September 24, 2026, the next runs are Friday September 25, Thursday October 1, Friday October 2 and Friday October 9.
0 0 */2 * 1 looks like "every other day, on Mondays", but because the day-of-month field starts with *, both must match: midnight on odd-numbered days that are also Mondays (October 5 and 19, 2026 are the next two).
What does */5 mean in cron?
Every 5 units of that field, counted from the start of its range. In the minute field */5 runs at :00, :05, :10 and so on. */7 still restarts at :00 each hour, so the last gap is shorter.
Is Sunday 0 or 7 in cron?
Both. cronie and Vixie cron treat 0 and 7 as Sunday, and SUN works too. A range like FRI-SUN wraps to Friday, Saturday and Sunday.
Why did my job run on the wrong days?
Most often it is the day rule: if you set both day of month and day of week, cron runs on either one. Put * in one of them to use only the other.
What time zone does cron use?
The server's local time zone, unless the crontab sets CRON_TZ (cronie). This page shows next runs in your browser's zone or UTC, so pick the one that matches the server.
Why does my command break at a percent sign?
In a crontab line, % in the command becomes a new line. Escape it as \% (for example date +\%F).