Cron every hour during business hours
The cron expression for every hour during business hours is:
0 9-17 * * 1-5Runs on the hour from 09:00 to 17:00, Monday to Friday: 9 runs a day, 45 a week.
Next 10 runs
For 0 9-17 * * 1-5, in the timezone you pick. Cron uses the server's timezone.
Times in UTC as of the last site update. They refresh when the page loads in a browser.
| # | Date and time | When |
|---|---|---|
| 1 | Oct 30, 2026, 09:00 | Friday |
| 2 | Oct 30, 2026, 10:00 | Friday |
| 3 | Oct 30, 2026, 11:00 | Friday |
| 4 | Oct 30, 2026, 12:00 | Friday |
| 5 | Oct 30, 2026, 13:00 | Friday |
| 6 | Oct 30, 2026, 14:00 | Friday |
| 7 | Oct 30, 2026, 15:00 | Friday |
| 8 | Oct 30, 2026, 16:00 | Friday |
| 9 | Oct 30, 2026, 17:00 | Friday |
| 10 | Nov 2, 2026, 09:00 | Monday |
How to read 0 9-17 * * 1-5
0 pins the job to minute 0. 9-17 in the hour field is every hour from 9 to 17, both included. 1-5 in the day-of-week field is Monday to Friday.
| Field | Value | Meaning | Allowed |
|---|---|---|---|
| Minute | 0 | At the top of the hour | 0-59 |
| Hour | 9-17 | Every hour from 9:00 AM to 5:00 PM | 0-23 |
| Day of month | * | Every day of the month | 1-31 |
| Month | * | Every month | 1-12 or jan-dec |
| Weekday | 1-5 | Monday through Friday | 0-7 or sun-sat |
Watch out for
- Ranges include both ends, so the last run is at 17:00. Use
9-16to stop at 16:00. - For every 30 minutes in the same window, use
*/30 9-17 * * 1-5(the last run is then 17:30).
Often used for: Syncs and checks that only matter while people are working.
Use it in
crontab
0 9-17 * * 1-5 /path/to/your-script.shEdit with crontab -e. Runs in the server's timezone.
Kubernetes CronJob
apiVersion: batch/v1
kind: CronJob
metadata:
name: my-job
spec:
schedule: "0 9-17 * * 1-5"
timeZone: "Etc/UTC"
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: my-job
image: busybox:1.36
command: ["sh", "-c", "date"]Without timeZone, the schedule follows the timezone of the kube-controller-manager.
GitHub Actions
on:
schedule:
- cron: '0 9-17 * * 1-5'
timezone: "Etc/UTC"
jobs:
run:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: ./your-script.shWithout timezone, GitHub runs schedules in UTC. It runs them at most every 5 minutes, and a run can start late when GitHub is busy.
Related schedules
Cron does not tell you when a job stops
Know when a job on this schedule does not run.
Your job pings Drumbeats when it finishes. If a ping does not arrive on schedule, you get an alert. No SDK, free for up to 50 monitors.
Free for up to 50 monitors · Setup in 60 seconds · No credit card required