Every 5 minutes from 09:00 to 17:55, Monday to Friday: 108 runs a weekday.
*/5 9-17 * * 1-5
Open in Crontab Generator
Polling or alerting that only matters during working hours, saving API calls and noise at night and at weekends.
| Field | Value | Matches |
|---|---|---|
| Minute | */5 | 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55 |
| Hour | 9-17 | 9, 10, 11, 12, 13, 14, 15, 16, 17 |
| Day of month | * | every value |
| Month | * | every value |
| Day of week | 1-5 | Monday, Tuesday, Wednesday, Thursday, Friday |
*/5 9-17 * * 1-5 /path/to/job
Computed when this page loaded (2026-11-11 02:24 UTC), assuming the scheduler runs in UTC.
| # | UTC | Your local time |
|---|---|---|
| 1 | Wed 2026-11-11 09:00 | |
| 2 | Wed 2026-11-11 09:05 | |
| 3 | Wed 2026-11-11 09:10 | |
| 4 | Wed 2026-11-11 09:15 | |
| 5 | Wed 2026-11-11 09:20 | |
| 6 | Wed 2026-11-11 09:25 | |
| 7 | Wed 2026-11-11 09:30 | |
| 8 | Wed 2026-11-11 09:35 | |
| 9 | Wed 2026-11-11 09:40 | |
| 10 | Wed 2026-11-11 09:45 |
Kubernetes uses the same five fields. Set spec.timeZone (stable since Kubernetes 1.27), otherwise the schedule follows the time zone of kube-controller-manager.
apiVersion: batch/v1
kind: CronJob
metadata:
name: every-5-minutes-during-business-hours
spec:
schedule: "*/5 9-17 * * 1-5"
timeZone: "Etc/UTC"
concurrencyPolicy: Forbid
startingDeadlineSeconds: 300
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: job
image: debian:bookworm-slim
command: ["/bin/sh", "-c", "/app/run-job.sh"]
Workflow schedules use five-field cron in UTC and run only from the default branch. Runs at minute 0 are the most likely to be delayed or dropped when GitHub is busy; an odd minute such as 7 or 23 starts more reliably.
on:
schedule:
- cron: '*/5 9-17 * * 1-5' # UTC
jobs:
run:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: ./run-job.sh
The equivalent OnCalendar= value is Mon..Fri *-*-* 09..17:00/5:00.
Check it with systemd-analyze calendar 'Mon..Fri *-*-* 09..17:00/5:00', which prints the next elapse time. Persistent=true runs a missed job after downtime, which classic cron never does.
[Unit]
Description=Every 5 minutes during business hours
[Timer]
OnCalendar=Mon..Fri *-*-* 09..17:00/5:00
Persistent=true
[Install]
WantedBy=timers.target
EventBridge rules take six fields (minute, hour, day-of-month, month, day-of-week, year) in UTC; EventBridge Scheduler can use a time zone. One of day-of-month and day-of-week must be ?, and day-of-week runs 1-7 from Sunday, so names are used here.
cron(0/5 9-17 ? * MON-FRI *)
Quartz adds a leading seconds field and needs ? in either day field; days of the week are 1 (SUN) to 7 (SAT).
0 0/5 9-17 ? * MON-FRI
Spring's @Scheduled(cron = ...) also uses six fields, but numbers days of the week 0-7 with Sunday as 0 or 7, like Unix cron; the names shown above work in both.
*/45 * * * **/7 * * * **/3 * * * **/20 * * * ** 9-17 * * 1-5*/2 * * * *