Every 3 Hours
0 */3 * * * 0 0 */3 * * ? 0 */3 * * * 0 */3 * * ? * 0 0 */3 * * * 0 */3 * * * Runs every 3 hours at the top of the hour — 00:00, 03:00, 06:00, 09:00, 12:00, 15:00, 18:00, 21:00. 8 invocations per day.
Use in your stack
# Run every 3 hours
0 */3 * * * /usr/local/bin/shift-report.sh
{ "cron": "0 0 */3 * * ?", "timezone": "UTC" }
apiVersion: batch/v1
kind: CronJob
metadata:
name: shift-report
spec:
schedule: "0 */3 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: shift-report
image: my-image:latest
restartPolicy: OnFailure
cron(0 */3 * * ? *)
@Scheduled(cron = "0 0 */3 * * *")
public void every3Hours() { /* ... */ }
on:
schedule:
- cron: '0 */3 * * *'
Next runs
Pick a timezone to see when this expression fires next.
Next 10 runs
- 012026-07-03T18:00:00.000Z
- 022026-07-03T21:00:00.000Z
- 032026-07-04T00:00:00.000Z
- 042026-07-04T03:00:00.000Z
- 052026-07-04T06:00:00.000Z
- 062026-07-04T09:00:00.000Z
- 072026-07-04T12:00:00.000Z
- 082026-07-04T15:00:00.000Z
- 092026-07-04T18:00:00.000Z
- 102026-07-04T21:00:00.000Z
Variations
Common use cases
- Three-shift workday tracking (8 hours × 3 shifts).
- Sync jobs between systems that don't need hourly precision.
- Sending time-of-day-tagged status reports.
- Periodic batch jobs aligned to standard work blocks.
Gotchas
- `*/3` in the hour field starts at 0 — there's no way to express "every 3 hours starting from 01:00" using shorthand. Use a range: `0 1-22/3 * * *`.
- AWS EventBridge: `0 */3 * * ? *`. Quartz: `0 0 */3 * * ?`.
0 */3 * * * is the quarter-day schedule — every three hours covers a working day in three batches plus three overnight batches. Often used for sync jobs that need to keep up with a busy primary but don’t justify the noise of hourly polling.
Frequently asked questions
What does `0 */3 * * *` mean?
Minute `0` and hour `*/3` mean "at minute 0 of every 3rd hour starting from 0." So the job fires at 00:00, 03:00, 06:00, 09:00, 12:00, 15:00, 18:00, and 21:00 — 8 invocations per day.
Does this run 8 times per day exactly?
Yes, in every dialect. `*/3` over the 0–23 hour range yields 8 hits (0, 3, 6, 9, 12, 15, 18, 21). Daylight saving transitions can shift this slightly — on spring-forward day the 02:00–03:00 hour disappears, but since this schedule doesn't fire during that hour anyway, it's unaffected.
How do I run every 3 hours but only during business hours?
Combine the step with a range: `0 9-18/3 * * 1-5` fires at 09:00, 12:00, 15:00, and 18:00 on weekdays. The `9-18/3` part says "every 3rd hour from 9 through 18," and `1-5` limits to Mon-Fri.
Browse all cron patterns
Every schedule Cronuru documents, with its expression and code snippets for six dialects.