Cron Syntax Explained — A Visual Guide to Every Field
Table of Contents
A cron expression is five space-separated fields that define a recurring schedule. Reading from left to right: minute hour day-of-month month day-of-week. Once you understand what each field controls, any expression becomes readable in seconds.
Paste an expression into our free crontab visualizer to see it translated to plain English plus the next 20 run times on a calendar.
The Five Cron Fields — A Visual Overview
+----------- minute (0 - 59)
| +--------- hour (0 - 23)
| | +------- day of month (1 - 31)
| | | +----- month (1 - 12)
| | | | +--- day of week (0 - 7, 0 and 7 = Sunday)
| | | | |
* * * * *
| Field | Range | Notes |
|---|---|---|
| Minute | 0-59 | 0 = start of the hour; 59 = last minute |
| Hour | 0-23 | 0 = midnight; 12 = noon; 23 = 11 PM |
| Day of month | 1-31 | Starts at 1, not 0. Days beyond month length are skipped. |
| Month | 1-12 | 1=January, 12=December. Some systems accept JAN-DEC names. |
| Day of week | 0-7 | 0 and 7 both = Sunday. 1=Monday, 5=Friday, 6=Saturday. |
Special Characters: *, /, -, and , Explained
Four special characters cover almost every schedule you'll need:
Asterisk (*) — "every"
* matches every valid value for that field. * * * * * runs every minute. 0 9 * * * runs every day at 9 AM (the * in day/month/weekday means "every day, every month, every day of week").
Slash (/) — "step" or "every N"
*/5 in the minute field means "every 5 minutes." */2 in the hour field means "every 2 hours." You can combine with ranges: 0-30/5 means "every 5 minutes from minute 0 to minute 30."
Hyphen (-) — "range"
1-5 in the day-of-week field means Monday through Friday. 9-17 in the hour field means hours 9 through 17 (9 AM to 5 PM). 0 9-17 * * 1-5 runs every hour from 9 AM to 5 PM on weekdays.
Comma (,) — "list"
1,15 in the day-of-month field means "on the 1st and 15th." 6,18 in the hour field means "at 6 AM and 6 PM." 0 6,12,18 * * * runs at 6 AM, noon, and 6 PM daily.
Field-by-Field Examples
Minute field examples:
| Value | Meaning |
|---|---|
0 | At the top of the hour (:00) |
30 | At :30 past the hour |
*/5 | Every 5 minutes (:00, :05, :10 ...) |
0,30 | At :00 and :30 |
0-15 | Every minute from :00 to :15 |
Hour field examples:
| Value | Meaning |
|---|---|
0 | Midnight (12 AM) |
9 | 9 AM |
17 | 5 PM |
*/4 | Every 4 hours (midnight, 4 AM, 8 AM, noon, 4 PM, 8 PM) |
9-17 | Every hour from 9 AM through 5 PM |
Day-of-week field examples:
| Value | Meaning |
|---|---|
0 or 7 | Sunday |
1 | Monday |
5 | Friday |
1-5 | Monday through Friday |
6,0 | Saturday and Sunday (weekend) |
Build Your Expression and Verify It
The fastest workflow:
- Use our cron generator to build the expression visually with dropdown fields.
- Paste the output into the crontab visualizer to see the next 20 run times on a calendar.
- Confirm it matches your intent — especially for business-hours or last-day-of-month schedules.
Common mistakes the visualizer catches:
- Off-by-one on hours: Typing
9when you meant 9 PM (should be21). - OR logic surprise:
0 0 1 * 1runs on both "the 1st of each month" AND "every Monday at midnight" — not just on Mondays that are the 1st. The visualizer shows this clearly in the calendar view. - Timezone mismatch: Your server timezone isn't what you assumed. The visualizer uses your browser's local timezone.
Try It Free — No Signup Required
Runs 100% in your browser. No account, no install, no limits.
Open Free Crontab VisualizerFrequently Asked Questions
What does "* * * * *" (five stars) mean in cron?
Five asterisks means "every minute of every hour of every day of every month of every day of the week" — it runs once per minute, continuously. It's the maximum frequency in standard cron. Use this only for tasks that genuinely need per-minute execution.
What is the difference between day-of-month and day-of-week?
Day-of-month (field 3) targets a specific date number in the month: the 1st, 15th, last day, etc. Day-of-week (field 5) targets a recurring weekday: every Monday, every Friday, etc. When both fields are non-wildcard, most cron systems use OR logic — the job runs if either condition matches.
Can cron run more frequently than once per minute?
Standard cron cannot run more frequently than once per minute — the minute is the smallest time unit. For sub-minute scheduling, use a cron job that runs every minute and internally loops (e.g., a shell script that runs every 30 seconds with a sleep loop), or use a different scheduler like systemd timers, Node.js setInterval, or a task queue.

