Cron every 30 minutes
*/30 * * * *Every 30 minutes, every hour, every day.
Next runs · UTC
- —
- —
- —
- —
- —
Calendar
September 2026 · UTC
0 runs
About this tool
*/30 * * * *. The minute step resolves to 0 and 30, so the job fires at the top and bottom of every hour - twice an hour, 48 times a day. The equivalent list form 0,30 * * * * is also common.The cron expression for every 30 minutes
*/30 * * * *
The minute step */30 resolves to 0 and 30 - two firings per hour, 48 per day. Equivalent to 0,30 * * * * (the explicit list form).
See the dedicated guide for the full breakdown: Cron every minute.
Paste it into the editor above to see the next runs on a calendar.
When to run a job every 30 minutes
- Polling an API or a queue every 30 minutes when no webhook is available.
- Health checks and uptime probes that should notice an outage within one interval.
- Cache, dashboard, or search-index refreshes where slightly stale data is acceptable.
Run this cron anywhere
*/30 * * * * is five-field cron syntax. It works as is in:
- Linux
crontab-*/30 * * * * /path/to/script.sh - Vercel cron jobs - declare in
vercel.json. - node-cron, robfig/cron and Kubernetes CronJob.
AWS EventBridge and Quartz use six-field expressions with a ? in one of the day fields, so convert first:
- AWS EventBridge -
cron(minute hour day-of-month month ? year); see the AWS guide. - Quartz Scheduler - prepend a seconds field (
0) and replace one day field with?; see the Quartz guide.
Useful variations
0,30 9-17 * * 1-5- every 30 minutes during business hours on weekdays15,45 * * * *- every 30 minutes offset by 15 (xx:15, xx:45)*/30 0-6 * * *- every 30 minutes overnight (midnight to 06:00)
Gotchas when running every 30 minutes
- Clock-aligned, not interval-based -
*/30 * * * *fires when the minute matches, counting from minute 0 of each hour. It is not "30 minutes after the previous run", and a run missed while the host was down is not replayed. - Overlapping runs - A run that takes longer than 30 minutes overlaps the next one. Wrap the command in
flock -nor setconcurrencyPolicy: Forbidon Kubernetes; Vercel and EventBridge may overlap runs if the previous one is still executing, so make the handler idempotent.
Examples
- 0 18 * * *Every day at 18:00
- 0 */5 * * *Every 5 hours
- 0 18 * * 1-5Weekdays at 18:00
- 0 0 1 * *Once a month, on the 1st at midnight
Cheatsheet
Full cheatsheet| Field | Req. | Range | Wildcards |
|---|---|---|---|
| minute | yes | 0-59 | , - * / |
| hour | yes | 0-23 | , - * / |
| day of month | yes | 1-31 | , - * / |
| month | yes | 1-12 or JAN-DEC | , - * / |
| day of week | yes | 0-6 or names; some dialects use 0-7 or 1-7 — see Dialects | , - * / |
Frequently asked questions
Timing
Are 0,30 * * * * and */30 * * * * equivalent?
Yes. Both select :00 and :30 every hour, producing 48 runs daily. The list form states the two clock minutes explicitly; the step form emphasizes the interval. Expression: */30 * * * *
How do I offset an every-30-minutes cron by 15 minutes?
Use 15,45 * * * *. It fires at :15 and :45 instead of at the top and bottom of the hour. Expression: 15,45 * * * *
How do I run every 30 minutes during weekday business hours?
Use 0,30 9-17 * * 1-5. It fires twice in every included hour, with the final run at 17:30 because 9-17 is inclusive. Expression: 0,30 9-17 * * 1-5
How do I run every 30 minutes only overnight?
Use */30 0-6 * * * for :00 and :30 from midnight through 06:30. Hour ranges are inclusive. Expression: */30 0-6 * * *
How much work can each half-hour run safely process?
Keep normal runtime below 30 minutes and capacity above one interval's arrivals. Otherwise backlog grows or runs overlap; an hourly cadence halves starts but doubles records per batch.
Hourly cron guideTimezones and DST
What happens to a half-hour cron during DST?
It is platform-specific. Vixie/cronie can skip or double local :00/:30 matches; GitHub advances nonexistent local times; EventBridge Scheduler skips spring and runs once in the fall overlap. UTC-only Vercel and Cloudflare are unaffected.
Timezone and DST referencePlatforms
Do GitHub Actions and EventBridge allow every 30 minutes?
Yes. Thirty minutes is above GitHub Actions' five-minute floor and EventBridge's one-minute floor.
Cron dialect matrixWhat is the AWS EventBridge expression for every 30 minutes?
Use cron(0/30 * * * ? *). EventBridge requires six fields including year, a ? in one day field, and the cron(...) wrapper. Expression: 0/30 * * * ? *
What is the Quartz expression for every 30 minutes?
Use 0 0/30 * * * ?. Quartz puts seconds first, so this fires at second zero of minutes 0 and 30. Expression: 0 0/30 * * * ?
Debugging
How should a half-hour batch track completed windows?
Persist the last completed window boundary and process forward from it. Standard cron does not replay a missed :00 or :30 start, so deriving work only from the current clock can skip a window.
Crontap
What should I consider before polling every 30 minutes?
This cadence makes 48 calls per day, so include API quotas, execution cost, and retries in capacity planning. Crontap can run it with retries for failed HTTP calls.
Schedule API callsGeneral
What is the cron expression for every 30 minutes?
*/30 * * * *. Paste this into Linux crontab, Vercel cron, node-cron, robfig/cron, or a Kubernetes CronJob to run a job every 30 minutes; AWS EventBridge and Quartz need the six-field form.
How can I verify this cron actually runs every 30 minutes?
The editor above shows the next 30+ runs on a calendar in your local timezone, plus a plain-English description. If the calendar matches your intent, the cron is correct.
Does */30 * * * * work on every platform?
Linux crontab, Vercel cron jobs, node-cron, robfig/cron, and Kubernetes CronJob accept the five-field form as is. AWS EventBridge and Quartz use six-field expressions with a ? in one of the day fields; see the AWS and Quartz guides for the conversion. Vercel's free Hobby plan caps the minimum frequency at once-per-day; the Pro plan removes that cap.
What happens if the previous run is still going when the next one fires?
Most schedulers will start the new run anyway, leading to overlap. To prevent this, wrap the command with flock -n /tmp/myjob.lock /path/to/script.sh on Linux, or set concurrencyPolicy: Forbid on Kubernetes CronJob. Vercel and EventBridge may overlap runs if the previous one is still executing; make the handler idempotent.
Write the cron here. Run it on Crontap.
Point Crontap at any URL. Pick any cron. Done.
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