Cron every 4 hours

0 */4 * * *

Runs six times a day: 00:00, 04:00, 08:00, 12:00, 16:00 and 20:00.

What each field means

FieldPositionMeaning
0minuteonly 0
*/4hourevery 4th hour (00:00–00:59, 04:00–04:59, 08:00–08:59, 12:00–12:59, …)
*day of monthevery day of month
*monthevery month
*day of weekevery day of week

Example run times

Starting from Wednesday 07 Jan 2026, 10:17, the next runs are:

  • Wed 07 Jan 2026, 12:00
  • Wed 07 Jan 2026, 16:00
  • Wed 07 Jan 2026, 20:00
  • Thu 08 Jan 2026, 00:00
  • Thu 08 Jan 2026, 04:00
  • Thu 08 Jan 2026, 08:00

How often it runs

  • 6 runs on each day it is active.
  • Active on 365 of the 365 days in 2026, for 2,190 runs that year.
  • Runs are always exactly 4 hours apart.

Use it on your platform

Linux crontab

0 */4 * * * /path/to/command

Edit with crontab -e. Cron uses the server's local time zone.

GitHub Actions

on:
  schedule:
    - cron: '0 */4 * * *'

Schedules are evaluated in UTC, and runs can start late when GitHub is busy.

Kubernetes CronJob

apiVersion: batch/v1
kind: CronJob
metadata:
  name: my-job
spec:
  schedule: "0 */4 * * *"
  timeZone: "Etc/UTC"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: my-job
              image: busybox
              command: ["sh", "-c", "date"]
          restartPolicy: OnFailure

Without timeZone, the schedule follows the time zone of the kube-controller-manager.

AWS EventBridge

cron(0 0/4 * * ? *)

AWS uses six fields (the last is the year), needs ? in either day-of-month or day-of-week, and counts weekdays from 1 = Sunday, so names like MON are safer than numbers. EventBridge rules run in UTC; EventBridge Scheduler lets you choose a time zone.

Spring @Scheduled

@Scheduled(cron = "0 0 */4 * * *")

Spring adds a seconds field at the start, so prepend 0 to run at second zero.

Quartz

0 0 0/4 * * ?

Quartz also starts with seconds and, like AWS, requires ? in one of the day fields.

Related schedules