cronuru
Pattern

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
  1. 012026-07-03T18:00:00.000Z
  2. 022026-07-03T21:00:00.000Z
  3. 032026-07-04T00:00:00.000Z
  4. 042026-07-04T03:00:00.000Z
  5. 052026-07-04T06:00:00.000Z
  6. 062026-07-04T09:00:00.000Z
  7. 072026-07-04T12:00:00.000Z
  8. 082026-07-04T15:00:00.000Z
  9. 092026-07-04T18:00:00.000Z
  10. 102026-07-04T21:00:00.000Z

Variations

0 */2 * * *

Every 2 hours

0 */6 * * *

Every 6 hours

0 */12 * * *

Every 12 hours

0 0 * * *

Daily at midnight

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.