Every 30 Minutes
*/30 * * * * 0 */30 * * * ? */30 * * * * */30 * * * ? * 0 */30 * * * * */30 * * * * Runs every 30 minutes — at :00 and :30 of every hour, every day.
Use in your stack
# Run every 30 minutes
*/30 * * * * /usr/local/bin/digest.sh
{ "cron": "0 */30 * * * ?", "timezone": "UTC" }
apiVersion: batch/v1
kind: CronJob
metadata:
name: digest
spec:
schedule: "*/30 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: digest
image: my-image:latest
restartPolicy: OnFailure
cron(*/30 * * * ? *)
@Scheduled(cron = "0 */30 * * * *")
public void every30Minutes() { /* ... */ }
on:
schedule:
- cron: '*/30 * * * *'
Next runs
Pick a timezone to see when this expression fires next.
Next 10 runs
- 012026-07-03T17:00:00.000Z
- 022026-07-03T17:30:00.000Z
- 032026-07-03T18:00:00.000Z
- 042026-07-03T18:30:00.000Z
- 052026-07-03T19:00:00.000Z
- 062026-07-03T19:30:00.000Z
- 072026-07-03T20:00:00.000Z
- 082026-07-03T20:30:00.000Z
- 092026-07-03T21:00:00.000Z
- 102026-07-03T21:30:00.000Z
Variations
Common use cases
- Sending half-hour summary digests to ops channels.
- Re-running ETL jobs on a half-hour boundary.
- Rotating short-lived caches that don't need quarter-hour freshness.
- Health-checking services that don't justify every-5-minute pings.
Gotchas
- Functionally identical to `0,30 * * * *`.
- Two jobs per hour, 48 per day — small enough that log volume isn't a concern.
- AWS EventBridge needs the 6-field form: `*/30 * * * ? *`.
*/30 * * * * is the schedule for “twice an hour, on the clock.” Two runs per hour is light enough that you rarely have to worry about overlap or log noise, but frequent enough that data stays fresh for most operational needs.
Frequently asked questions
What does `*/30 * * * *` mean?
`*/30` in the minute field means "every 30th minute starting from 0" — so the job runs at :00 and :30 of every hour. The remaining four asterisks mean any hour, any day of the month, any month, any day of the week.
Is `*/30 * * * *` the same as `0,30 * * * *`?
Yes, functionally identical. Both forms fire at :00 and :30 of every hour. `*/30` is shorthand for the comma-separated list `0,30`. Use whichever your team finds clearer.
Does it fire at the exact half-hour?
Yes — at exactly :00 and :30. Cron has minute-level precision in standard dialects (Unix, Kubernetes, GitHub Actions). For sub-minute precision you'd need Quartz or Spring with a seconds field.
How do I run something every 30 minutes during business hours only?
Combine the half-hour minute pattern with an hour range: `*/30 9-17 * * 1-5` runs every 30 minutes between 9 AM and 5 PM on weekdays. Hours 9 through 17 (inclusive), 30-minute interval, Monday through Friday.
Browse all cron patterns
Every schedule Cronuru documents, with its expression and code snippets for six dialects.