Cron Expression Generator & Explainer

A cron expression is five space-separated fields — minute, hour, day-of-month, month, day-of-week — that together define when a scheduled command runs. Paste any expression below and this tool validates it, explains each field in plain English and lists the exact next run times.

Five fields: minute hour dom month dow — supports * , - / and names like MON, JAN. A leading seconds field is detected automatically.

Preset schedules

Every minute
* * * * *
Every 5 minutes
*/5 * * * *
Every 10 minutes
*/10 * * * *
Every 15 minutes
*/15 * * * *
Every 30 minutes
*/30 * * * *
Hourly (at :00)
0 * * * *
Every 4 hours
0 */4 * * *
Daily at 02:00
0 2 * * *
Weekdays at 08:00
0 8 * * 1-5
Weekly (Sun 03:30)
30 3 * * 0
Monthly (1st, 00:00)
0 0 1 * *
Quarterly (1st Jan/Apr/Jul/Oct)
0 0 1 1,4,7,10 *
Yearly (Jan 1, 00:00)
0 0 1 1 *
Sundays at 17:00
0 17 * * 0
Twice daily (06:00 & 18:00)
0 6,18 * * *
Nightly backup (23:45)
45 23 * * *

Reverse helper: pick a schedule, get the expression

Preview:  

Explanation

At 00:00, on day-of-month 01; in January.
FieldValueMeaning
Minutes0at minute 00
Hours0during hour 00
Day of month1on day-of-month 01
Month1in January
Day of week*every day of the week
Cron expression
0 0 1 1 *

Next 5 runs

Computed server-side in UTC at request time. With JavaScript enabled the list below refreshes instantly in your local timezone.

#Scheduled time
Friday 2027-01-01 00:00:00 UTC
Saturday 2028-01-01 00:00:00 UTC
Monday 2029-01-01 00:00:00 UTC
Tuesday 2030-01-01 00:00:00 UTC
Wednesday 2031-01-01 00:00:00 UTC

How crontab scheduling works

The cron daemon wakes once per minute and asks, for each line in the crontab: do the current minute, hour, day, month and weekday all satisfy this line's fields? Each field may contain:

SyntaxMeaningExample
*any value*
,list of values0,15,30,45
-inclusive rangeMON-FRI
/step values over a range (or the whole field)*/10, 8-18/2
JAN–DEC, SUN–SATnames instead of numbers (case-insensitive)0 9 * JAN-MAR MON

The day-of-month / day-of-week trap (read this twice)

If both restricted fields are set — neither being * — cron runs the command when either matches, not both. The classic surprise: 0 0 13 * 5 fires on the 13th of every month AND every Friday, not "Friday the 13th". To express an intersection, add a guard inside the script itself ([ "$(date +%u)" = 5 ] || exit 0). This tool labels the OR rule directly in the explanation whenever your expression triggers it.

Timezones and the seconds myth

Scheduling around log timestamps? Cross-check epoch values with the Unix timestamp converter, lock down the credentials those jobs use with the password generator, and give each automation a unique ID from the UUID v4 generator so log lines stay greppable. Port-level firewall questions belong in the common ports reference.

Frequently asked questions

What does */5 mean in a cron expression?

It means 'every fifth value of this field starting at its minimum'. In the minute field, */5 expands to minutes 0, 15... precisely 0, 5, 10 ... 55 — so the command runs every five minutes, aligned to the clock rather than to when the daemon started.

Why does my cron job run on both the 1st and every Monday?

Because day-of-month and day-of-week are OR-ed whenever both are restricted. 0 0 1 * 1 runs at midnight on the 1st AND every Monday. Standard cron cannot express 'first Monday' directly; guard it in the shell or test [ $(date +\%d) -le 7 ] inside the job.

What timezone does cron use?

The daemon's local timezone by default — on most cloud servers that is UTC unless configured otherwise. Modern Vixie cron and systemd timers support per-job zones (CRON_TZ=Europe/Berlin prefix or TimeZone= in the timer unit), which beats converting times by hand.

Does cron support seconds?

No. Classic POSIX/Vixie crontab granularity is one minute with exactly five fields. Six-field expressions with leading seconds come from Quartz, Spring and various language libraries. This generator detects the extra field so you can see what such schedulers will do, and warns you that plain crontab files cannot use it.

How do I write 'every 5 minutes' in crontab?

*/5 * * * *. The asterisk with a step covers the whole minute field: minutes 0, 5, 10 through 55. Variants like 5/5 (starting at minute 5) also work here and on most modern crons, but stick to */5 for maximum portability.

What is the difference between cron and crontab?

cron is the daemon that executes scheduled commands; crontab is the file (and its editing command) where per-user schedules live. A crontab line is five time fields followed by the command: 30 4 * * 1-5 /usr/local/bin/report.sh runs the report at 04:30 on weekdays.