Paste a cron expression to see when it runs in plain English.
Five fields, space-separated: minute hour day-of-month month day-of-week.
Symbols: * = every, */n = every n, a,b,c = list, a-b = range.
Need to build one instead? Use the Cron Expression Generator.
| Field | Values | Notes |
|---|---|---|
| Minute | 0–59 | Smallest unit standard cron understands |
| Hour | 0–23 | 24-hour clock; 0 is midnight |
| Day of month | 1–31 | Months are not all the same length — day 31 silently skips short months |
| Month | 1–12 | Most implementations also accept JAN–DEC |
| Day of week | 0–6 | 0 is Sunday; many crons also accept 7 for Sunday and SUN–SAT |
| Expression | Runs |
|---|---|
0 * * * * | Every hour, on the hour |
*/5 * * * * | Every five minutes |
0 9 * * 1-5 | 09:00, Monday to Friday |
30 2 * * 0 | 02:30 every Sunday |
0 0 1 * * | Midnight on the first of each month |
0 0 1 1 * | Midnight on 1 January |
Day-of-month and day-of-week are combined with OR, not AND. When both fields are restricted, the job runs
if either matches. 0 0 13 * 5 does not mean "Friday the 13th" — it means "every 13th, and also
every Friday". To target one specific weekday, leave day-of-month as *.
Steps count from the start of the field, not from when you install the job. */20 * * * * fires
at :00, :20 and :40 — not twenty minutes from now. And because the counter resets each hour, */45
fires at :00 and :45, leaving a 15-minute gap rather than a 45-minute one.
Cron uses the server's clock and never makes up a missed run. If the machine is off or asleep at the scheduled minute, that occurrence is simply skipped. On days when clocks shift for daylight saving, a job scheduled inside the skipped hour may not run at all, and one inside the repeated hour may run twice — behaviour varies by implementation.
Standard Unix cron resolves to the minute. Expressions with six or seven fields — a leading seconds column, and sometimes a trailing year — come from Quartz, Spring and some CI schedulers. Pasting one of those into a normal crontab shifts every field by one position, which usually produces a valid but wrong schedule.
Shortcuts accepted by most crons: @yearly, @monthly, @weekly,
@daily (midnight), @hourly, and @reboot, which runs once when the machine
starts rather than on a schedule. They are convenient but not universally supported — managed schedulers often
reject them.
The usual causes are not in the expression. Cron runs with a minimal environment, so commands need absolute paths and cannot rely on your shell profile. Output goes nowhere unless redirected, which hides errors. The server may be in UTC while you were thinking in local time. And a crontab file whose last line has no trailing newline can be ignored entirely.