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 breakdown for */30 9-17 * * 1-5
FieldValueMeaning
Minute*/30Minutes 0 and 30
Hour9-17Every hour from 09 through 17, inclusive
Day of month*Every date that meets the weekday rule
Month*Every month
Day of week1-5Monday 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 compatibility for */30 9-17 * * 1-5
PlatformStatusExpressionWhat to know
Unix crontabReady*/30 9-17 * * 1-5Use directly in a normal five-field user crontab.
Kubernetes CronJobReady*/30 9-17 * * 1-5Use as spec.schedule; set spec.timeZone when local wall-clock behavior matters.
GitHub ActionsReady*/30 9-17 * * 1-5Use under on.schedule; UTC is the default and an IANA timezone may be specified.
Vercel Cron JobsPlan / behavior limit*/30 9-17 * * 1-5Numeric syntax is valid on eligible plans and always uses UTC; Hobby is daily-only.
AWS EventBridge SchedulerConvertcron(0/30 9-17 ? * MON-FRI *)Convert to AWS minute-first cron(...), add the required year, and use ? in one day field.
Spring @ScheduledConvert0 */30 9-17 * * MON-FRIUse Spring’s six fields by prepending seconds and set zone explicitly when needed.
systemd timerConvertMon..Fri *-*-* 09..17:00/30:00Use 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.