Cron is the standard way to schedule recurring jobs on Unix systems and in countless CI and orchestration tools. Its five-field syntax is compact but famously easy to misread, and a misread schedule means a job that runs at the wrong time — often unnoticed until something important is missed or duplicated.
The five fields
A standard cron expression has five space-separated fields, in this order: minute (0–59), hour (0–23), day of month (1–31), month (1–12), and day of week (0–6, where 0 is Sunday). An asterisk means "every" value for that field.
Special syntax
- Asterisk (*) — every value.
- Step (*/5) — every 5th value; in the minute field, every five minutes.
- Range (1-5) — an inclusive range, e.g. Monday to Friday in the day-of-week field.
- List (1,15,30) — specific values.
The classic gotchas
Two mistakes cause most misfires. First, the day-of-week numbering: 0 is Sunday, and people often assume 1 is Monday (it is) but forget Sunday can also be 7 on some systems. Second, when both day-of-month and day-of-week are set, many cron implementations run the job when either matches, not both — which can fire far more often than intended.
Read before you deploy
The safest habit is to translate any cron expression into plain English before shipping it. "0 9 * * 1" reads as "at 09:00 on Monday" — confirming that in words takes a second and prevents a whole class of silent scheduling bugs.