*/30 * * * *
Open in the generator
Both */30 * * * * and 0,30 * * * * fire at :00 and :30. There is no difference in behaviour; pick whichever reads better in your crontab.
If you need the second run at a different minute, use a list: 10,40 * * * * runs at ten past and twenty to.
Field by field
| Value | Field | Meaning |
|---|---|---|
| */30 | Minute 0–59 | every 30 minutes |
| * | Hour 0–23 | every hour |
| * | Day of month 1–31 | every day of the month |
| * | Month 1–12 or JAN–DEC | every month |
| * | Day of week 0–7 or SUN–SAT (0 and 7 are Sunday) | every day of the week |
Next run times
Computed in your browser from the current time, so you can check the schedule against a clock you trust.
Your timezone (local)
- Needs JavaScript.
UTC (GitHub Actions, Kubernetes default)
Variations
0,30 * * * *identical, written as a list · try it0 * * * *every hour · see page*/30 8-18 * * *every 30 minutes from 08:00 to 18:30 · try it
Where this expression works
- Linux and macOS crontab: as written; times follow the system timezone.
- Kubernetes CronJob: the same five fields; UTC unless
spec.timeZoneis set. - GitHub Actions: the same syntax in UTC, minimum interval five minutes, no
@shortcuts. - AWS EventBridge: a different six-field syntax; do not paste this expression unchanged.
Full platform comparison · Cron tutorial
FAQ
Is */30 the same as every half hour after the job finishes?
No. Cron fires at fixed clock times. If the job takes 40 minutes, the next run starts anyway; use a lock to prevent overlap.