How to Run a Cron Job Every Weekday at 9 AM
The cron expression 0 9 * * 1-5 runs a job at exactly 9:00 AM every Monday through Friday. This guide breaks down every field and shows you how to adapt it for any time or day combination.
The expression: 0 9 * * 1-5
cron
0 9 * * 1-5 │ │ │ │ └── day of week: 1-5 = Monday through Friday │ │ │ └──── month: * = every month │ │ └────── day of month: * = every day │ └──────── hour: 9 = 9 AM (24-hour) └────────── minute: 0 = at :00 exactly
Breaking it down field by field:
- Minute (0): Run at exactly minute 0 — the top of the hour, not 9:15 or 9:30.
- Hour (9): Hour 9 in 24-hour format is 9 AM. Hour 21 would be 9 PM.
- Day of month (*): Any day of the month — the weekday filter handles the day selection.
- Month (*): Every month of the year.
- Day of week (1-5): The range 1 through 5 means Monday (1) through Friday (5). Sunday is 0, Saturday is 6.
Test this expression live and see the next 8 scheduled run times.
Try in Cron Tool →Day of week number reference
| Number | Day |
|---|---|
| 0 (or 7) | Sunday |
| 1 | Monday |
| 2 | Tuesday |
| 3 | Wednesday |
| 4 | Thursday |
| 5 | Friday |
| 6 | Saturday |
Common variations
cron
# 9 AM weekdays 0 9 * * 1-5 # 8:30 AM weekdays 30 8 * * 1-5 # 9 AM Monday only 0 9 * * 1 # 9 AM Monday, Wednesday, Friday 0 9 * * 1,3,5 # 9 AM on weekdays in January only 0 9 * 1 1-5 # 6 PM every Friday (end of week report) 0 18 * * 5 # 9 AM and 5 PM every weekday 0 9,17 * * 1-5
What about timezones?
Cron always runs in the timezone of the server where it is configured. If your server is in UTC but you want 9 AM IST (Indian Standard Time, UTC+5:30), you need to subtract 5:30 — meaning you'd schedule it at 3:30 AM UTC:
cron
# 9 AM IST = 3:30 AM UTC 30 3 * * 1-5
Some modern cron tools like AWS EventBridge and GitHub Actions allow you to specify a timezone directly. For standard Linux cron, you must convert to server time manually, or set the CRON_TZ variable at the top of your crontab file.
How to add this to crontab
bash
# Open crontab editor crontab -e # Add your job (example: run a backup script) 0 9 * * 1-5 /home/user/scripts/daily_report.sh # With logging 0 9 * * 1-5 /home/user/scripts/daily_report.sh >> /var/log/report.log 2>&1
Quick reference
0 9 * * 1-5— 9 AM, Monday–Friday30 8 * * 1-5— 8:30 AM, Monday–Friday0 9 * * 1,3,5— 9 AM, Monday, Wednesday, Friday- Days of week: 0=Sun, 1=Mon, 2=Tue, 3=Wed, 4=Thu, 5=Fri, 6=Sat
- Cron uses the server timezone — convert if needed