The expression
0 9 * * 1-5 /path/to/your/script.sh
Day-of-week numbers
| Number | Day |
|---|---|
| 0 (or 7) | Sunday |
| 1 | Monday |
| 2 | Tuesday |
| 3 | Wednesday |
| 4 | Thursday |
| 5 | Friday |
| 6 | Saturday |
So 1-5 = Monday through Friday = weekdays.
Variations
| Expression | Meaning |
|---|---|
0 9 * * 1-5 | Weekdays at 9 AM |
0 9 * * MON-FRI | Same, using day names |
0 9 * * 1,2,3,4,5 | Same, explicit list |
0 9 * * 1,3,5 | Mon, Wed, Fri at 9 AM |
0 9 * * 0,6 | Weekends at 9 AM (Sun, Sat) |
0 9 * * 1-4 | Mon-Thu at 9 AM (excludes Friday) |
Quartz / AWS gotcha
If you're using Quartz or AWS EventBridge, the day-of-week numbers are offset by one — 1=Sunday, 2=Monday, …, 7=Saturday. So weekdays become 2-6, not 1-5. Use the named version (MON-FRI) to avoid confusion.
# AWS EventBridge cron(0 9 ? * MON-FRI *) # Quartz 0 0 9 ? * MON-FRI
Examples by platform
Linux crontab
0 9 * * 1-5 /usr/local/bin/send-daily-report.sh
GitHub Actions
on:
schedule:
- cron: '0 9 * * 1-5' # Note: UTC timezone
Kubernetes CronJob
spec: schedule: "0 9 * * 1-5"
Common mistakes
Don't combine day-of-month and day-of-week. Unix cron treats both fields as OR, not AND. So 0 9 15 * 1-5 fires on the 15th of every month AND every weekday at 9 AM, not "the 15th if it's a weekday." To get the AND behavior, gate inside your script:
0 9 15 * * [ $(date +\%u) -le 5 ] && /path/to/script.sh