To run a cron job every 30 minutes, use:
*/30 * * * *
It fires at minute 0 and minute 30 of every hour: 48 times a day. 0,30 * * * * is exactly the same schedule. In a crontab:
*/30 * * * * /usr/local/bin/backup-db.sh >> /var/log/backup-db.log 2>&1
What each field means
| Field | Value | Meaning |
|---|---|---|
| Minute | */30 | minute 0 and minute 30 |
| Hour | * | every hour |
| Day of month | * | every day |
| Month | * | every month |
| Day of week | * | every day of the week |
Variants
| Schedule | Expression |
|---|---|
| At :15 and :45 | 15,45 * * * * |
| Every 30 minutes from 9:00 to 17:30 | */30 9-17 * * * |
| Every 30 minutes on weekdays, business hours | */30 9-17 * * 1-5 |
| Every 30 minutes overnight, 22:00 to 05:30 | */30 22-23,0-5 * * * |
| Jenkins, spread | H/30 * * * * |
| Quartz (seconds first) | 0 0/30 * * * ? |
Spring @Scheduled | 0 */30 * * * * |
| AWS EventBridge | rate(30 minutes) or cron(0/30 * * * ? *) |
Platform notes
- Linux crontab: local server time; cron mails any output to the crontab owner unless you redirect it or set
MAILTO="". - GitHub Actions: allowed. Use
15,45 * * * *rather than0,30to avoid the start of the hour, when scheduled runs are most often delayed. UTC unless you settimezone. See GitHub Actions cron. - Kubernetes CronJob:
schedule: "*/30 * * * *".startingDeadlineSecondsdecides whether a run missed during an outage still starts late or is skipped. - Cloudflare Cron Triggers:
*/30 * * * *is one of Cloudflare's own examples, in UTC. - Vercel: Pro or Enterprise only; on Hobby this exact expression fails the deployment.
- Jenkins:
H/30 * * * *keeps two runs an hour at a per-job offset. See Jenkins cron.
Common mistakes
- *`30 * * `* runs once an hour, at half past.
- *`0 /30 * * `* runs once a day at 00:00, because a step of 30 in the hour field (0 to 23) only ever lands on 0.
- Expecting UTC from a Linux server set to local time, or the reverse in the cloud.
Running an AI agent every 30 minutes
A good pace for an agent that watches something live, such as an incident channel summary that keeps a running update while an incident is open. The scheduled skills page shows how to put any Claude Code or Codex skill on this schedule.
Questions
Is */30 the same as 0,30?
Yes. In the minute field both mean minutes 0 and 30. Some people prefer 0,30 because it is obvious at a glance.
How do I run every 30 minutes at :15 and :45?
Use 15,45 * * * *, or 15-59/30 * * * *. The step counts from the first value of the range.
Why does Vercel reject */30 * * * *?
Hobby projects can only run cron jobs once a day, and Vercel's docs use */30 * * * * as the example that fails deployment. Every 30 minutes needs Pro or Enterprise (as of October 2026).
Can I use */45 for every 45 minutes?
Not reliably. */45 runs at minute 0 and 45, so the gaps are 45 and 15 minutes. Cron steps reset every hour; for a true 45-minute interval, use a scheduler that supports fixed rates.