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

NumberDay
0 (or 7)Sunday
1Monday
2Tuesday
3Wednesday
4Thursday
5Friday
6Saturday

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–Friday
  • 30 8 * * 1-5 — 8:30 AM, Monday–Friday
  • 0 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
← Previous
What Does * * * * * Mean in Cron?
Next →
What is Base64 Encoding?