Every 4 Hours
0 */4 * * * 0 0 */4 * * ? 0 */4 * * * 0 */4 * * ? * 0 0 */4 * * * 0 */4 * * * Runs every 4 hours at the top of the hour — 00:00, 04:00, 08:00, 12:00, 16:00, 20:00. 6 invocations per day.
Use in your stack
# Run every 4 hours
0 */4 * * * /usr/local/bin/sync-job.sh
{ "cron": "0 0 */4 * * ?", "timezone": "UTC" }
apiVersion: batch/v1
kind: CronJob
metadata:
name: four-hourly
spec:
schedule: "0 */4 * * *"
timeZone: "UTC"
jobTemplate:
spec:
template:
spec:
containers:
- name: job
image: my-image:latest
restartPolicy: OnFailure
cron(0 */4 * * ? *)
@Scheduled(cron = "0 0 */4 * * *", zone = "UTC")
public void every4Hours() { /* ... */ }
on:
schedule:
- cron: '0 */4 * * *'
Next runs
Pick a timezone to see when this expression fires next.
- 012026-07-13T20:00:00.000Z
- 022026-07-14T00:00:00.000Z
- 032026-07-14T04:00:00.000Z
- 042026-07-14T08:00:00.000Z
- 052026-07-14T12:00:00.000Z
- 062026-07-14T16:00:00.000Z
- 072026-07-14T20:00:00.000Z
- 082026-07-15T00:00:00.000Z
- 092026-07-15T04:00:00.000Z
- 102026-07-15T08:00:00.000Z
Variations
Common use cases
- Mid-frequency data syncs between systems that drift slowly.
- Refreshing OAuth tokens or signed URLs with a multi-hour lifetime.
- Batch report generation six times a day.
- Partial cache warming or incremental reindexing.
Gotchas
- `*/4` on the hour field fires at 0, 4, 8, 12, 16, 20 — it does **not** continue to 24. The hour field is 0–23, so it wraps to the next day's 00:00, giving an even 4-hour spacing.
- AWS EventBridge: `0 */4 * * ? *`. Quartz: `0 0 */4 * * ?` (seconds field first).
- Aligns to UTC midnight by default — on a non-UTC server the wall-clock times shift. Pin the timezone explicitly if alignment matters.
0 */4 * * * is the six-times-a-day cadence — evenly spaced 4-hour intervals at 00:00, 04:00, 08:00, 12:00, 16:00, and 20:00. It sits between every 3 hours (8×/day) and every 6 hours (4×/day), and it’s a common default for work that must stay reasonably fresh without the load of hourly runs.
The step syntax */4 expands to the list 0,4,8,12,16,20. Because the hour field only counts 0–23, the sequence wraps cleanly at the day boundary, so the 20:00 run is followed by the next day’s 00:00 — still a 4-hour gap. If you need the runs offset from midnight, switch to an explicit list like 0 2,6,10,14,18,22 * * *. For sub-hour cadences see every 30 minutes; for less frequent, every 8 hours or every 12 hours.
Frequently asked questions
What does `0 */4 * * *` mean?
Is `0 */4 * * *` the same as `0 0,4,8,12,16,20 * * *`?
Why does every 4 hours give 6 runs, not 5 or 7?
How do I run every 4 hours starting at 02:00 instead of midnight?
Browse all cron patterns
Every schedule Cronuru documents, with its expression and code snippets for six dialects.