Cron Every 30 Minutes
Half-hourly cron settled — */30 * * * * with live next runs, the 0,30 twin spelling, and every scheduler dialect on one page.
History
Valid expressions you run are kept here — on this device only.
The plain-English description appears here.
| # | UTC | UTC time | DST |
|---|---|---|---|
| Upcoming runs for a valid expression appear here. | |||
—Press ? for shortcuts
Platform variants
Classic cron
Cron expression: */30 * * * *
Equivalent to 0,30 * * * * — both fire at minutes 0 and 30.
Quartz
Cron expression: 0 0/30 * * * ?
Seconds-first Quartz form; 0/30 steps from minute 0.
AWS EventBridge
Cron expression: cron(0/30 * * * ? *)
Six EventBridge fields with ? day-of-month and a * year.
Kubernetes
Cron expression: */30 * * * *
Paste into spec.schedule of a CronJob unchanged.
GitHub Actions
Cron expression: */30 * * * *
Use under on.schedule.cron — GitHub evaluates it in UTC.
Also covers: every half hour, twice an hour
Do it offline:$ (crontab -l; echo "*/30 * * * * /path/to/job") | crontab -
How to use it
- Take the classic line for crontab, Kubernetes or GitHub Actions — the half-hour cadence needs no dialect changes there.
- Prefer an explicit list? 0,30 * * * * schedules identical minutes; the worked example proves the match run for run.
- For :15 and :45 instead, set the minute field to 15,45 in the tester and check its preview first.
Twice an hour, on the hour and at half past: */30 * * * * is the half-hourly workhorse for feed pulls, mailbox sweeps and sync jobs that five-minute polling would waste. Below: the line's meaning, its next runs computed live, an equivalent spelling some teams prefer, and the Quartz, EventBridge, Kubernetes and GitHub Actions forms.
Examples
*/30 * * * *describes Every 30 minutes
next 1 2026-08-01T00:30:00.000Z
next 2 2026-08-01T01:00:00.000Z
next 3 2026-08-01T01:30:00.000Z
next 4 2026-08-01T02:00:00.000Z
next 5 2026-08-01T02:30:00.000ZOn the hour and at half past, around the clock — 48 runs a day. The preview alternates :30 and :00, the point of a step that divides 60.
0,30 * * * *describes At 0 and 30 minutes past the hour
next 1 2026-08-01T00:30:00.000Z
next 2 2026-08-01T01:00:00.000Z
next 3 2026-08-01T01:30:00.000Z
next 4 2026-08-01T02:00:00.000Z
next 5 2026-08-01T02:30:00.000ZIdentical runs, minute for minute: list and step compile to the same schedule here. Pick whichever reads better in review.
Every example on this page is executed against the same engine that powers the tool, on every build.
Gotchas worth knowing
Half-hourly is not 30 * * * *
A bare 30 in the minute field runs once an hour at half past — half the intended firings, quietly. Steps need the */ prefix to sweep; the read-back makes the difference obvious.
Common errors
Field 1 (minute): "*/0" uses step 0, which would never advance — use a step of 1 or more.- A slip while editing the step value: zero could never advance, so rather than misbehave, the parse refuses and anchors the token to fix.
FAQ
How many times a day does */30 fire?
Forty-eight — each hour contributes :00 and :30. If half past alone is wanted, drop the step and write a plain 30.
Can the runs land at :15 and :45?
Not with a step — it always anchors at zero. Write the list 15,45 in the minute field; the preview shows the shifted pair.
Why do previewed times end in :00 and :30 exactly?
Because 30 divides 60, the sweep resets cleanly at each hour. Steps that do not divide 60 — 45, say — leave lopsided gaps worth previewing first.