This cron expression should do it:
30 * * * * commandCrontab does not understand intervals, it only understands a schedule.
Valid hours: 0-23.
Valid minutes: 0-59.
This means run when the minute of each hour is 30. So in this case it would run at: 1:30, 2:30, 3:30, etc.
Cron is matching, not counting. 30 * * * * says “the minute is 30” — and the wildcard hour says “any hour”. The result is twenty-four runs per day, all at half past.
To run twice an hour (e.g. on the hour and at 30 past), use a list: 0,30 * * * *. Or step syntax: */30 * * * * (functionally identical, expands to 0,30). For a different cadence — say every 20 minutes — use */20 * * * * for 00/20/40 or 10-50/20 * * * * for 10/30/50.
One frequent confusion: people expect */30 * * * * to “sleep 30 minutes” between runs. It does — but only because 00 and 30 happen to be exactly 30 minutes apart inside one hour. The idea of an interval is implicit; cron itself just matches the minute field. If your schedule needs to be measured from the previous run (e.g. 30 minutes after job ends, regardless of clock time), use a job runner with that semantic, not cron.
Read the dedicated guide: Cron every hour.
View future cron matches in a calendar
Showing next 1000 cron schedules
See this cron expression on the calendar → view example
Other answers and worked examples for the most confusing cron expressions.
Ready to schedule it?
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.
Free forever tier ・ No credit card required
Schedule
“every 5 minutes”
Next run
in 23s
Permalink: https://tool.crontap.com/help/cron-job-expression-every-minutes-past-the-hour