Skip to main content

Cron expression

*/30 8 31 JUN 1-5

This cron expression schedules a command to run every 30 minutes, between 08:00 and 08:59, on day 31 of the month, Monday through Friday, only in June.

Every 30 minutes, between 08:00 and 08:59, on day 31 of the month, Monday through Friday, only in June.

Next runs · UTC

September 2026 · UTC

This expression never fires — day 31 does not exist in June

Read more in the dedicated guide: Cron every 30 minutes.

What this cron means, field by field

Each field of */30 8 31 JUN 1-5 controls one dimension of the schedule. Hover over any value in the editor above to see its tooltip; the table below summarises the same information.

FieldValueMeansRange / hint
minute*/30every 30 minutes0-59. The minute(s) of the hour the job will fire.
hour8at hour 80-23. The hour(s) of the day the job will fire (0 = midnight, 23 = 11 PM).
day of month31at day of month 311-31. The day(s) of the month. Use * if you want every day.
monthJUNat month JUN1-12 or JAN-DEC. The month(s). Use * for every month.
day of week1-5from day of week 1 through 50-7 or SUN-SAT (0 and 7 both mean Sunday). Use * for every day of the week.

Next 5 runs

This expression never fires — day 31 does not exist in June. Every field is valid on its own, but no calendar date satisfies all of them at once.

Similar cron expressions

Common variations and tweaks of */30 8 31 JUN 1-5.

Where else this cron could be used

The same expression */30 8 31 JUN 1-5 works in:

Examples

  • 0 18 * * *
    Every day at 18:00
  • 0 */5 * * *
    Every 5 hours
  • 0 18 * * 1-5
    Weekdays at 18:00
  • 0 0 1 * *
    Once a month, on the 1st at midnight

Cheatsheet

Full cheatsheet
FieldReq.RangeWildcards
minuteyes0-59, - * /
houryes0-23, - * /
day of monthyes1-31, - * /
monthyes1-12 or JAN-DEC, - * /
day of weekyes0-6 or names; some dialects use 0-7 or 1-7 — see Dialects, - * /

Frequently asked questions

What does the cron expression `*/30 8 31 JUN 1-5` mean?

every 30 minutes, between 08:00 and 08:59, on day 31 of the month, Monday through Friday, only in June.

When does `*/30 8 31 JUN 1-5` run next?

Never — day 31 does not exist in June. The expression is syntactically valid but no calendar date satisfies every field.

Is `*/30 8 31 JUN 1-5` a valid cron expression?

It parses, but it never fires: day 31 does not exist in June. Pick a day that exists in every listed month.

Run this cron in production

Stop pasting `*/30 8 31 JUN 1-5` into a host you also have to babysit.

WordPress, Shopify, Railway, Cloud Run, Vercel, HubSpot, Ghost, your own box. If it answers HTTP, Crontap can drive it on a clock you can read, in the timezone that actually matters, and page you when something breaks.

1.9k+ teams · Free forever tier · No credit card