Dev utility
Cron expression explainer
Paste a cron expression to read it in plain English and see when it will actually run. Fields are minute hour day-of-month month day-of-week — or add a leading seconds field for 6-field (Quartz-style) cron.
Next runs
Evaluated in UTC. Local times are your browser's zone.
The fields
| minute | 0–59 |
| hour | 0–23 |
| day of month | 1–31 |
| month | 1–12, or JAN–DEC |
| day of week | 0–7 (0 and 7 are Sunday), or SUN–SAT |
Add a sixth field at the front for seconds (0–59) and the expression is read Quartz/Spring-style — */30 * * * * * is "every 30 seconds". A 5-field expression simply runs at second 0. Nicknames work too: @hourly, @daily, @weekly, @monthly, @yearly.
Syntax
*- Every value.
5- A single value.
1-5- A range (1 through 5).
*/15- A step — every 15th value (0, 15, 30, 45).
0,30- A list of values.
9-17/2- A range with a step (9, 11, 13, 15, 17).
The day-of-month / day-of-week gotcha
When both the day-of-month and day-of-week fields are restricted (neither is *), cron runs when either matches — not both. So 0 0 13 * 5 fires on the 13th of the month and on every Friday, which surprises people expecting "Friday the 13th". When one field is *, the other simply applies.
Sources & references
- crontab(5) — manual pageman7.org
- Cron — Wikipedia (syntax overview)Wikipedia