Curated cron expression
Every 30 Minutes During Business Hours Cron Expression: */30 9-17 * * 1-5
Decode */30 9-17 * * 1-5 for half-hourly weekday business hours, including inclusive-range behavior, exact run times, timezone and holiday caveats, and platform conversions.
Meaning at a glance
*/30 9-17 * * 1-5
Run at :00 and :30 from 09:00 through 17:30 on weekdays
Eighteen times per weekday: 09:00, 09:30, …, 17:00, and 17:30.
Next-run example: At Tuesday 16:42, the next runs are Tuesday 17:00, Tuesday 17:30, and Wednesday 09:00.
How */30 9-17 * * 1-5 works
The minute step selects :00 and :30, the inclusive hour range selects every hour from 9 through 17, and the weekday range selects Monday through Friday.
Because cron ranges include both endpoints, the final run is 17:30. If work must stop before 17:00, use an hour range ending at 16 or express the final boundary in application logic.
| Field | Value | Meaning |
|---|---|---|
| Minute | */30 | Minutes 0 and 30 |
| Hour | 9-17 | Every hour from 09 through 17, inclusive |
| Day of month | * | Every date that meets the weekday rule |
| Month | * | Every month |
| Day of week | 1-5 | Monday through Friday |
Good use cases
- Office-hours data sync
- Sales lead polling
- Business-hour status refresh
- Internal notification batching
Timezone and daylight-saving behavior
Use the office or customer timezone explicitly; a server-local 09:00-17:30 window can drift away from business hours.
A named timezone keeps the business window on local clock time. The UTC equivalent changes when the region enters or leaves DST.
The expression does not contain a timezone. The scheduler supplies that context. Use the next-run preview above in the same IANA timezone as production, then confirm the target platform's own timezone rules.
Platform compatibility and converted expressions
The source expression is five-field Unix cron. Use the exact equivalent below rather than adding or removing fields by sight.
| Platform | Status | Expression | What to know |
|---|---|---|---|
| Unix crontab | Ready | */30 9-17 * * 1-5 | Use directly in a normal five-field user crontab. |
| Kubernetes CronJob | Ready | */30 9-17 * * 1-5 | Use as spec.schedule; set spec.timeZone when local wall-clock behavior matters. |
| GitHub Actions | Ready | */30 9-17 * * 1-5 | Use under on.schedule; UTC is the default and an IANA timezone may be specified. |
| Vercel Cron Jobs | Plan / behavior limit | */30 9-17 * * 1-5 | Numeric syntax is valid on eligible plans and always uses UTC; Hobby is daily-only. |
| AWS EventBridge Scheduler | Convert | cron(0/30 9-17 ? * MON-FRI *) | Convert to AWS minute-first cron(...), add the required year, and use ? in one day field. |
| Spring @Scheduled | Convert | 0 */30 9-17 * * MON-FRI | Use Spring’s six fields by prepending seconds and set zone explicitly when needed. |
| systemd timer | Convert | Mon..Fri *-*-* 09..17:00/30:00 | Use OnCalendar syntax and validate it with systemd-analyze calendar on the target host. |
Edge cases to check before deployment
- The last run is 17:30 because the 9-17 hour range is inclusive.
- Weekdays still include public holidays.
- GitHub scheduled workflows are best effort and may start after the intended half-hour mark.
- A run that takes longer than 30 minutes can overlap the next one.
Frequently asked questions
What does the cron expression */30 9-17 * * 1-5 mean?
*/30 9-17 * * 1-5 means “run at :00 and :30 from 09:00 through 17:30 on weekdays.” Eighteen times per weekday: 09:00, 09:30, …, 17:00, and 17:30.
What are the next run times for */30 9-17 * * 1-5?
At Tuesday 16:42, the next runs are Tuesday 17:00, Tuesday 17:30, and Wednesday 09:00. Exact timestamps depend on the scheduler timezone and the current time.
What timezone does */30 9-17 * * 1-5 use?
Use the office or customer timezone explicitly; a server-local 09:00-17:30 window can drift away from business hours.
Can I use */30 9-17 * * 1-5 on every scheduling platform?
No. It is a five-field Unix expression. Some platforms accept it directly, while AWS EventBridge Scheduler, Spring, and systemd require the converted form shown in the compatibility table.