Cron: weekdays at 9 am
The day-of-week range 1-5 covers Monday to Friday, and the job runs once on each of those days at 09:00. Most crons also accept names: 0 9 * * MON-FRI.
Open in Cron Parser The expression is filled in: change it and watch the next runs.
Expression
0 9 * * 1-5 Meaning
At 09:00, Monday through Friday
Next 5 runs
Your time zone
The same schedule on other platforms
| Platform | Written as | Note |
|---|---|---|
| Linux crontab | 0 9 * * 1-5 | Five fields, in the server's local time zone. A % in the command has to be escaped as \%. |
| GitHub Actions | - cron: '0 9 * * 1-5' | UTC by default: 09:00 UTC is 10:00 or 11:00 in Central Europe. Add timezone: "Europe/Warsaw" next to cron to run at 09:00 local time. |
| Kubernetes CronJob | schedule: "0 9 * * 1-5" | Five fields, in the controller's time zone unless spec.timeZone is set (Kubernetes 1.27 and later). concurrencyPolicy decides what happens when runs overlap. |
| systemd timer | OnCalendar=Mon..Fri 09:00 | Its own calendar syntax, in a .timer unit, local time. hourly, daily and monthly match cron, but weekly means Monday. Persistent=true catches up on runs missed while the machine was off. |
| AWS EventBridge | cron(0 9 ? * MON-FRI *) | Days are numbered from Sunday (1) here, so names are safer: 2-6 would also mean Monday to Friday. |
| Quartz / Spring | 0 0 9 ? * MON-FRI | Quartz numbers days from Sunday (1), Spring from Monday like cron; MON-FRI means the same in both. |
Common mistakes
Day numbers differ
In crontab, 1 is Monday and both 0 and 7 are Sunday. In EventBridge and Quartz, 1 is Sunday and 7 is Saturday. Names (
MON-FRI) mean the same everywhere.Adding a day of the month makes it OR
0 9 1 * 1-5runs on the 1st of every month and on every weekday, not only on weekdays that fall on the 1st. When both day fields are set, cron runs if either matches.Holidays
Cron has no calendar of public holidays. Check the date inside the job, or skip it with a list of dates the job reads.