Skip to main content

Cron every 30 minutes

*/30 * * * *

Every 30 minutes, every hour, every day.

Next runs · UTC

Calendar

September 2026 · UTC

0 runs

About this tool

Run a cron every 30 minutes with */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:

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 weekdays
  • 15,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 -n or set concurrencyPolicy: Forbid on 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-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

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 * * * *

Open in editor
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 * * * *

Open in editor
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

Open in editor
Business hours guide
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 * * *

Open in editor
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 guide

Timezones 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 reference

Platforms

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 matrix
What 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 * * * ? *

Open in editor
AWS cron guide
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 * * * ?

Open in editor
Quartz cron guide

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 calls

General

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