Cron Expression Tester
Understand any cron expression instantly — get a plain-English explanation, preview the next run times in your timezone, and build schedules from presets. Covers standard 5-field crontab syntax with lists, ranges, steps and @aliases, plus a full syntax cheat sheet. Free, instant, no signup.
Every 5 minutes
Minute
*/5
0–59
Hour
*
0–23
Day of month
*
1–31
Month
*
1–12 or JAN–DEC
Day of week
*
0–7 or SUN–SAT · 0/7 = Sun
Next 5 runs
Computing…
Cron syntax cheat sheet
| Symbol | Meaning | Example |
|---|---|---|
| * | any value | * = every minute/hour/day |
| , | value list | 1,15 = on the 1st and 15th |
| - | range | 9-17 = 9:00 through 17:00 |
| / | step | */5 = every 5 units |
| @daily | alias | @hourly, @daily, @weekly, @monthly, @yearly |
Fields combine freely: 30 8 * * 1-5 is "08:30 on weekdays", 0 3 1,15 * * is "03:00 on the 1st and 15th", and */10 9-17 * * * is "every 10 minutes during working hours".
How to use the Cron Expression Tester
- Type or paste an expression — the plain-English description updates as you type, and errors are pinpointed to the field that caused them.
- Check the next 5 runs — computed in your local timezone (shown above the list) so you can sanity-check the schedule against a calendar before deploying it.
- Start from a preset — the chips cover the schedules that appear in almost every crontab, from every-minute to first-of-the-month.
- Mind the server's timezone — your server most likely runs UTC. A 9:00 job in UTC fires at a different local hour; verify with
timedatectlordateon the host.
Frequently asked questions
What do the five fields in a cron expression mean?
From 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, where both 0 and 7 mean Sunday). Each field accepts a value, a list (1,15), a range (9-17), a step (*/5) or * for "any". The expression "30 2 * * 1" therefore means: at 02:30 every Monday.
How do I run a cron job every 5 minutes?
Use */5 * * * * — the */5 step in the minute field matches minutes 0, 5, 10, … 55. The same pattern works in other fields: 0 */6 * * * runs every 6 hours on the hour, and 0 0 */2 * * runs every second day at midnight (based on the day number, so month boundaries can produce a 1-day gap).
How do I run a cron job every 2 weeks?
You can't — standard cron has no "every N weeks" concept; the day-of-month and day-of-week fields reset every month, so a true 14-day interval isn't expressible. The closest approximations: 0 0 1,15 * * (the 1st and 15th — twice a month, which is what most people actually want) or run the job weekly and let the script decide: exit early unless the ISO week number is even. If you're on systemd, timers support real biweekly schedules natively via OnCalendar.
What happens when both day-of-month and day-of-week are set?
Classic (Vixie) cron treats them as OR, not AND: "0 0 1 * 1" runs on the 1st of the month AND on every Monday — whichever comes first. This surprises almost everyone. If you need "the first Monday of the month" you can't express it in standard cron; schedule every Monday and check the date in your script.
Is 0 and 7 the same day of week?
Yes — both mean Sunday. POSIX cron defines day-of-week as 0–6 starting at Sunday, but Vixie cron (what Linux distributions ship) also accepts 7 for Sunday. This tester accepts both and normalises 7 to 0.
What timezone do cron jobs run in?
The timezone of the machine (or container) running the cron daemon — often UTC on servers, which is why a job scheduled for 0 9 * * * fires at 9:00 UTC, not 9:00 your local time. Some systems support CRON_TZ=Europe/Vilnius at the top of the crontab. The preview on this page uses your browser's local timezone, shown next to the run times.
Does cron support seconds?
Standard Unix cron does not — the smallest unit is one minute. Six-field expressions with a leading seconds field come from Quartz (Java) and some cloud schedulers. If a tool rejects your 6-field expression, drop the first field. For sub-minute scheduling, use a loop with sleep, a systemd timer with OnCalendar, or your platform's native scheduler.
Why didn't my cron job run?
The most common causes: the cron daemon uses a different timezone than you expected; the PATH inside cron is minimal so commands that work in your shell fail (use absolute paths); the crontab line is missing a newline at the end; %-signs weren't escaped (cron treats % as newline); or the machine was off at the scheduled time (plain cron doesn't catch up — anacron does). Silent failures are exactly why teams add heartbeat monitoring to critical jobs.
What is @reboot and why can't it be previewed?
@reboot runs a command once when the cron daemon starts — usually at machine boot. It has no time schedule at all, so there are no "next runs" to compute. The other aliases map to normal schedules: @hourly is 0 * * * *, @daily is 0 0 * * *, @weekly is 0 0 * * 0, @monthly is 0 0 1 * *, and @yearly is 0 0 1 1 *.
The schedule is right — but did the job actually run?
Cron fails silently: wrong timezone, broken PATH, a dead machine. WatchFor monitors your endpoints and services around the clock and alerts you the moment something stops responding.
Free plan · 15 monitors · no credit card required