Cron Expression Builder and Explainer
Type a cron expression, fill in the five fields, or pick a preset. You get a plain English reading, a field-by-field breakdown and the next 5 times the job will run, shown in your own time zone. It handles lists, ranges, steps, month and weekday names and the @daily style shortcuts, and it says so when the day-of-month and day-of-week fields combine in a way that surprises people. Everything runs in your browser.
The five fields
| Field | Allowed values |
|---|---|
| Minute | 0 to 59 |
| Hour | 0 to 23 |
| Day of month | 1 to 31 |
| Month | 1 to 12, or jan to dec |
| Day of week | 0 to 7 (0 and 7 are both Sunday), or sun to sat |
Fields are separated by spaces, in that order, and the command follows them. This page covers the schedule part only.
Operators
- * means every value in the field.
-
a,b,c is a list:
1,15in the day-of-month field means the 1st and the 15th. -
a-b is an inclusive range:
9-17in the hour field means 9, 10 and so on up to 17. -
*/n and a-b/n are steps:
*/15in the minute field means 0, 15, 30 and 45, and10-50/20means 10, 30 and 50. A step needs*or a range in front of it, so5/15is rejected here. Steps restart in every field, so*/23in the hour field means hours 0 and 23, not every 23 hours. -
Names. Month and weekday names use the first three letters in any case, and ranges and lists of names such as
mon-friorjan,julare allowed. - Shortcuts. @yearly and @annually (0 0 1 1 *), @monthly (0 0 1 * *), @weekly (0 0 * * 0), @daily and @midnight (0 0 * * *) and @hourly (0 * * * *). @reboot runs at start-up, so it has no schedule to show.
The day-of-month and day-of-week rule
This is the part that catches people. The two day fields work together:
- If one of them is
*and the other is restricted, only the restricted one counts.0 0 * * 1runs on Mondays, and0 0 15 * *runs on the 15th. - If both are restricted, the job runs on a day that matches either one.
30 4 1,15 * 5runs at 04:30 on the 1st and 15th of every month, plus every Friday. It does not mean only Fridays that fall on the 1st or 15th.
The crontab(5) manual page words the test as "restricted (i.e., do not contain the * character)". A day field that starts with a star, such as */2, therefore counts as unrestricted, and then both fields must match. The calculator follows that rule and shows a warning whenever the either-one rule is in play. If you need "the first Monday of the month" you cannot get it from these two fields alone. The usual workaround is to run the job every Monday and test the date inside the script.
Time zones and daylight saving time
- Cron uses the time zone of the system that runs it, unless the crontab sets one (cronie accepts
CRON_TZ). This page shows run times in your browser's time zone, or in UTC if you tick the box. If your server runs in UTC, tick the box to see what the server will do. - A local time that does not exist on the day the clocks go forward is skipped, so a job set for 02:30 does not run that day in a zone that jumps from 02:00 to 03:00. The crontab(5) manual page says the same. This page skips those times too.
- A local time that happens twice when the clocks go back can run the job twice on a real system. This page lists it once. Scheduling heavy jobs outside the 01:00 to 03:00 window avoids both effects.
Examples
| Expression | Runs |
|---|---|
| */5 * * * * | Every 5 minutes |
| 0 * * * * | At the start of every hour |
| 30 2 * * * | Every day at 02:30 |
| 0 9 * * 1-5 | At 09:00 on weekdays |
| 0 0 1 * * | At midnight on the 1st of every month |
| 0 0 1 1 * | At midnight on 1 January (same as @yearly) |
| */15 9-17 * * mon-fri | Every 15 minutes between 09:00 and 17:45 on weekdays |
| 0 0 29 2 * | Only on 29 February, so only in leap years |
What this page does not cover
It covers the standard 5-field crontab format only. There is no seconds field here. Expressions with 6 or 7 fields, and the characters ?, L, W and #, belong to Quartz and Spring schedulers, and some cloud schedulers use their own variants. This page tells you when it sees them rather than guessing.
Study and related tools
Scheduling jobs with cron is part of Linux system administration. Read the Linux commands cheat sheet and the Linux+ XK0-006 objectives guide, try the free Linux+ XK0-006 practice test or the free LPIC-1 practice test, and see the free tools page for more.
Cron expression FAQ
What does */5 * * * * mean?
Every 5 minutes, at minutes 0, 5, 10 and so on up to 55 of every hour, every day.
How do I run a job every 90 minutes?
You cannot with one expression, because steps restart in each field. Use two entries, such as 0 0,3,6,9,12,15,18,21 * * * and 30 1,4,7,10,13,16,19,22 * * *, or run the job every 30 minutes and have the script check the time.
Is Sunday 0 or 7?
Both. The day-of-week field accepts 0 to 7, and 0 and 7 are both Sunday. The POSIX specification itself only defines 0 to 6.
Why did my job run on days I did not expect?
Almost always the day-of-month and day-of-week rule above. When both fields are set the job runs on either match.
Does cron support seconds?
No. The smallest step is one minute.
Why is the first run time not what I expected?
Run times are worked out from the current minute in your browser's time zone. If the server uses a different zone, tick the UTC box or convert accordingly.
Syntax follows the POSIX crontab utility specification (pubs.opengroup.org/onlinepubs/9799919799/utilities/crontab.html), which defines the five fields, lists, ranges and the either-day rule. Steps, names, 7 as Sunday and the @ shortcuts are extensions documented in crontab(5) (man7.org/linux/man-pages/man5/crontab.5.html), checked on 8 November 2026. Results were tested on 8 November 2026 against Python croniter, an independent reference written from the crontab(5) rules, and hand cases.