A cron expression is a compact but not always obvious way to write a schedule: a string like */15 * * * * won't mean much until you understand the format. Cron is used in Linux (crontab), CI/CD pipelines, and many task schedulers, and a mistake in a single field can run a job at the wrong time. Let's cover the format and common examples.
The five cron fields
A classic cron expression has five fields in a strict order:
minute hour day of month month day of week
0-59 0-23 1-31 1-12 0-7
Day of week: 0 and 7 both mean Sunday, 1 is Monday, and so on through Saturday (6).
Special characters
*— "any value" (every minute/hour/day, depending on the field).*/N— "every N units," for example*/15in the minute field means every 15 minutes.a-b— a range, for example1-5in the day-of-week field means Monday through Friday.a,b,c— a list of specific values, for example0,30in the minute field means at minute 0 and minute 30 of every hour.
Example breakdown
| Expression | Meaning |
|---|---|
* * * * * |
Every minute |
*/5 * * * * |
Every 5 minutes |
0 * * * * |
At the start of every hour |
0 0 * * * |
Every day at midnight |
30 8 * * 1-5 |
At 08:30 on weekdays (Mon–Fri) |
0 9 1 * * |
At 09:00 on the first day of every month |
0 0 * * 0 |
At midnight every Sunday |
A common mistake
Mixing up the day-of-month and month fields, or forgetting that day-of-week numbering starts at Sunday (0) rather than Monday — which can make a "weekdays only" schedule accidentally include a weekend day. Before saving a job, it's worth double-checking that the expression decodes to exactly what you intended.
Checking it online
Don't try to keep the field order and special characters in your head — paste the expression into the cron decoder, and it will translate it into plain English ("at 08:30, on weekdays") while also validating the syntax. Note that shorthand expressions like @daily aren't supported yet — only the classic 5-field format.