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.
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
Explanation
| Field | Value | Meaning |
|---|---|---|
| Minutes | 45 | at minute 45 |
| Hours | 23 | during hour 23 |
| Day of month | * | every day of the month |
| Month | * | every month |
| Day of week | * | every day of the week |
45 23 * * *
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 |
|---|---|
| Sunday 2026-08-23 23:45:00 UTC | |
| Monday 2026-08-24 23:45:00 UTC | |
| Tuesday 2026-08-25 23:45:00 UTC | |
| Wednesday 2026-08-26 23:45:00 UTC | |
| Thursday 2026-08-27 23:45: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:
| Syntax | Meaning | Example |
|---|---|---|
| * | any value | * |
| , | list of values | 0,15,30,45 |
| - | inclusive range | MON-FRI |
| / | step values over a range (or the whole field) | */10, 8-18/2 |
| JAN–DEC, SUN–SAT | names 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
- cron evaluates in the daemon's local timezone — usually the system zone, configurable via
TZorCRON_TZon modern Vixie implementations. Servers default to UTC far more often than admins expect. - Classic cron has no seconds field. Five fields only. Quartz/Spring-style schedulers accept six. This parser auto-detects a leading seconds field and warns you about portability.
- DST is honored against wall-clock time: during spring-forward hours that don't exist, jobs are skipped; fall-back repeats can double-run them.
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.