Cron expression generator & preview
Two directions, one page. Build an expression from a schedule you can say out loud, or paste one you found and see the next ten times it fires. No account, nothing stored — the page just asks our scheduler what it would do.
Next runs are computed by our API — enable JavaScript, or use the reference below.
Now make it tell you when it stops running:
Monitor this job — freeFrom plain words to cron
The other direction: you know when the job should run, you need the five fields. With JavaScript on, clicking a row loads the expression into the field above.
| You want | You write |
|---|---|
| every day at 2:00 | 0 2 * * * |
| every Monday morning | 0 9 * * 1 |
| twice a day, morning and evening | 0 6,18 * * * |
| the first of the month | 0 0 1 * * |
| every 15 minutes on weekdays | */15 * * * 1-5 |
| every five minutes | */5 * * * * |
| every hour, on the hour | 0 * * * * |
| every weekday at 9:00 | 0 9 * * 1-5 |
| every Friday at 18:30 | 30 18 * * 5 |
| every six hours | 0 */6 * * * |
| the 28th of every month at 4:00 | 0 4 28 * * |
| midnight on New Year | 0 0 1 1 * |
Common schedules
The expressions people actually write. With JavaScript on, clicking a row loads it into the field above.
| Expression | Fires |
|---|---|
* * * * * | every minute |
0,30 * * * * | every 30 minutes |
15 * * * * | hourly at :15 |
0 */2 * * * | every 2 hours |
30 3 * * * | daily at 3:30 |
0 10 * * 6,0 | weekends at 10:00 |
0 4 * * 1 | every Monday at 4:00 |
*/15 9-18 * * 1-5 | every 15 minutes during office hours |
*/10 * * * * | every 10 minutes |
5 0 * * 0 | weekly, Sunday at 00:05 |
Four mistakes this tester will show you
Every one of them produces a valid expression — cron accepts it and then does something else than you meant. Paste them above and watch the dates.
*/60 * * * * is not hourly.
A step applies inside the field's range, so
*/60 matches only minute 0 —
right by accident — and */70
never fires at all. Hourly is
0 * * * *.
Day of month and day of week are combined with OR.
If both are set (neither is *),
0 3 13 * 5 means "the 13th
or any Friday", not "Friday the 13th".
Both 0 and
7 are Sunday. So
1-7 is Monday through Sunday —
the whole week, not the working part of it. Weekdays are
1-5.
The zone is the server's, not yours. Cron reads the
expression in the system time zone (or
CRON_TZ, if set at the top of the
crontab). That is exactly what the selector above is for.
The full reference — special characters,
L /
W /
#, the
% trap, systemd
OnCalendar equivalents — lives in
the cron cheat sheet.
Questions
Which cron flavour does this use?
The standard five-field crontab syntax — minute, hour, day of month, month, day of week — plus the @yearly, @monthly, @weekly, @daily and @hourly shorthands. It is the same parser CronAlive uses to compute real check deadlines, so what you see here is what the monitoring would expect.
Why do the runs depend on the time zone?
A cron expression names a wall-clock time, and wall-clock time is different in every zone. Pick the zone your server actually runs in — otherwise a daily 03:30 job can look correct here and fire at a completely different hour in production. Daylight saving transitions are handled for you.
Does */60 mean once an hour?
No, and this is the most common mistake. A step is applied inside the field range, so */60 in the minute field matches only minute 0 of every hour — which happens to look right — while */70 never matches anything at all. Write 0 * * * * when you mean hourly.
Is the tool free?
Yes, and no account is needed. It is rate limited to 30 lookups a minute per address, which is far more than anyone types by hand and enough to keep the endpoint cheap to run.
An expression that fires is not a job that ran
This page answers "when would it fire". It cannot answer the question that actually costs you money: did it? Cron is equally silent when a job finished and when it never started — a wiped crontab, a full disk, a machine that never came back up all look like nothing at all.
That is what cron job monitoring is for: the job pings a URL when it runs, and if the ping does not arrive on schedule you get an alert. On Laravel it is one macro per task, with the schedule read straight from your code.
Other free tools: the SSL certificate checker and the HTTP status checker. All three are on the tools page.