cronuru
Pattern

Every 2 Hours

0 */2 * * *
0 0 */2 * * ?
0 */2 * * *
0 */2 * * ? *
0 0 */2 * * *
0 */2 * * *

Runs every 2 hours at the top of the hour — 00:00, 02:00, 04:00, …, 22:00. 12 invocations per day.

Use in your stack

# Run every 2 hours
0 */2 * * * /usr/local/bin/sync.sh
{ "cron": "0 0 */2 * * ?", "timezone": "UTC" }
apiVersion: batch/v1
kind: CronJob
metadata:
  name: sync
spec:
  schedule: "0 */2 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: sync
            image: my-image:latest
          restartPolicy: OnFailure
cron(0 */2 * * ? *)
@Scheduled(cron = "0 0 */2 * * *")
public void every2Hours() { /* ... */ }
on:
  schedule:
    - cron: '0 */2 * * *'

Next runs

Pick a timezone to see when this expression fires next.

Next 10 runs
  1. 012026-08-19T16:00:00.000Z
  2. 022026-08-19T18:00:00.000Z
  3. 032026-08-19T20:00:00.000Z
  4. 042026-08-19T22:00:00.000Z
  5. 052026-08-20T00:00:00.000Z
  6. 062026-08-20T02:00:00.000Z
  7. 072026-08-20T04:00:00.000Z
  8. 082026-08-20T06:00:00.000Z
  9. 092026-08-20T08:00:00.000Z
  10. 102026-08-20T10:00:00.000Z

Variations

0 1-23/2 * * *

Every odd hour — the same cadence, opposite phase

0 * * * *

Every hour

0 */3 * * *

Every 3 hours

0 */6 * * *

Every 6 hours

0 */12 * * *

Every 12 hours

Common use cases

  • Periodic data syncs between systems where 2-hour lag is fine.
  • Cache rebuilds for moderately stale data.
  • Sending periodic digest notifications to operators.
  • Retrying failed background jobs on a slow cadence.

Gotchas

  • `*/2` in the hour field starts from 0, so it always fires on **even hours**. To fire on odd hours (01:00, 03:00, …) use `0 1-23/2 * * *` — see [every odd hour](/every-odd-hour).
  • AWS EventBridge needs the 6-field form: `0 */2 * * ? *`.
  • Quartz needs seconds + ?: `0 0 */2 * * ?`.

0 */2 * * * fires twelve times a day, on even hours. A common middle-ground schedule for syncs and rebuilds that don’t need hourly freshness but shouldn’t go a quarter-day between runs.

Frequently asked questions

What does `0 */2 * * *` mean?
Minute `0` and hour `*/2` mean "at minute 0 of every 2nd hour starting from 0." So the job fires at 00:00, 02:00, 04:00, 06:00, 08:00, 10:00, 12:00, 14:00, 16:00, 18:00, 20:00, and 22:00 — 12 invocations per day.
How do I run every 2 hours starting from 01:00 instead of 00:00?
Use `0 1-23/2 * * *` — the range `1-23` limits the hour field, then `/2` steps through it by 2. This fires at 01:00, 03:00, 05:00, …, 23:00. The `*/2` shorthand always starts from the field's minimum (0 for hours).
Is `0 */2 * * *` the same as `0 0,2,4,6,8,10,12,14,16,18,20,22 * * *`?
Yes — functionally identical. The `*/2` is shorthand for the explicit list. Use whichever your team finds more readable in the surrounding code.

More hours schedules

Other patterns on the same cadence — or browse every schedule.