Cron Explainer
Read a schedule in plain English and see its next runs — Linux cron, Kubernetes, GitHub Actions, Quartz/Spring, AWS EventBridge and systemd timers.
How to use
- Pick where the schedule runs — each system reads cron differently.
- Paste the expression to read it in English, field by field.
- Check the next runs in the right time zone.
Where does this schedule run?
crontab(5): minute hour day-of-month month day-of-week
“At 09:00 on Monday through Friday.”
| Minute | 0 | 0 |
| Hour | 9 | 9 |
| Day of month | * | every value |
| Month | * | every value |
| Day of week | 1-5 | Mon, Tue, Wed, Thu, Fri |
Times inside a daylight-saving gap are skipped here; some schedulers run them late instead.
Same five fields, different rules
Standard cron reads minute, hour, day of month, month and day of week. Quartz and Spring add seconds in front and an optional year, and require ? in one of the two day fields. AWS EventBridge uses six fields inside cron( ), also with ?, and always runs in UTC. systemd timers use a different calendar syntax altogether. Kubernetes and GitHub Actions use standard five-field cron — GitHub always in UTC, and runs can start late when its runners are busy.
Mistakes that look right
If both day fields are set in standard cron, the job runs when either matches, not both: “0 9 13 * 5” runs on every 13th and every Friday. A step restarts each hour: */7 in the minute field runs at 0, 7 … 56 and then 0 again, a four-minute gap. And 0 0 31 * * never runs in months with fewer than 31 days.
Daylight saving time
When clocks go forward, times inside the skipped hour do not exist; when they go back, an hour happens twice. Schedulers handle this differently — some skip, some run late, some run twice — so jobs that must run exactly once belong in UTC. The next-runs list uses the time zone you choose and shows the real local times around each change.
Common questions
What does */5 mean in cron?
“Every 5th value”: in the minute field, */5 runs at minutes 0, 5, 10 and so on. A range with a step, such as 10-30/5, runs at 10, 15, 20, 25 and 30.
Why does my cron job run on unexpected days?
In standard cron, if both day-of-month and day-of-week are set, the job runs when either matches. The explainer warns about this.
Which time zone does cron use?
The scheduler’s: the server’s time zone for crontab, .spec.timeZone for Kubernetes, and always UTC for GitHub Actions and EventBridge rules.
Known limitations
- systemd “~” (days from the end of the month) isn’t supported yet.
- EventBridge rate() has no fixed start, so next runs can’t be listed.
- Times inside a daylight-saving gap are skipped.
- Browser extensions can read any page — use a private window for sensitive data. How the lock works
Related reading on CipherMind
Standards & references
- crontab(5) — Linux cron (opens in a new tab)
- Quartz CronTrigger (opens in a new tab)
- AWS EventBridge schedule expressions (opens in a new tab)
- Kubernetes CronJob (opens in a new tab)
- GitHub Actions schedule (opens in a new tab)
- systemd.time(7) — OnCalendar (opens in a new tab)