0 */6 * * * — What does this cron expression mean?
0 */6 * * * splits the day into four equal blocks. Both fields matter: the leading 0 pins the run to minute 0, and */6 in the hour field picks hours 0, 6, 12 and 18. Leave the minute as * by accident and the job runs every minute of those four hours, 240 times a day instead of 4.
0 */6 * * *
Run the job every 6 hours, on the hour: at 00:00, 06:00, 12:00 and 18:00 every day.
Frequency: 4 runs per day. cronstrue reads it as “On the hour, every 6 hours”.
Open 0 */6 * * * in the Cron BuilderField-by-field breakdown
0
Minute
0–59
*/6
Hour
0–23
*
Day of month
1–31
*
Month
1–12
*
Day of week
0–6
- Minute0 — only at minute 0. This is what makes it “every 6 hours” rather than “every minute during every 6th hour”.
- Hour*/6 — every 6th hour starting at 0: 0, 6, 12, 18.
- Day of month* — every day of the month.
- Month* — every month.
- Day of week* — every day of the week.
Next run times
Example: if it is Monday, 5 Jan 2026, 09:07 UTC, the next runs of 0 */6 * * * (UTC) are:
- #1Mon, 5 Jan 2026, 12:00 UTC
- #2Mon, 5 Jan 2026, 18:00 UTC
- #3Tue, 6 Jan 2026, 00:00 UTC
- #4Tue, 6 Jan 2026, 06:00 UTC
- #5Tue, 6 Jan 2026, 12:00 UTC
Live times from your current clock replace this example once the page loads. Cron uses the scheduler's timezone; most cloud servers, GitHub Actions and AWS EventBridge rules use UTC.
0 */6 * * * in Quartz, AWS, GitHub Actions, Kubernetes and systemd
Crontab (Linux / macOS)
0 */6 * * * /usr/local/bin/job.sh >> /var/log/job.log 2>&1Standard 5-field syntax used by Vixie cron, cronie, busybox crond and most libraries (node-cron, APScheduler, robfig/cron).
Quartz (6 and 7 fields)
0 0 0/6 * * ?
0 0 0/6 * * ? *
# Spring @Scheduled
@Scheduled(cron = "0 0 */6 * * *")Quartz fields are seconds, minutes, hours: 0 0 0/6 means second 0, minute 0, every 6th hour from midnight.
AWS EventBridge
cron(0 0/6 * * ? *)
# interval alternative
rate(6 hours)cron(0 0/6 …) runs at 00, 06, 12 and 18 UTC. rate(6 hours) runs 6 hours apart starting from creation time, so the hours depend on when you deployed.
GitHub Actions
on:
schedule:
# Every 6 hours, evaluated in UTC
- cron: '0 */6 * * *'Runs at 00:00, 06:00, 12:00 and 18:00 UTC. Because all four are top-of-the-hour, they are prime candidates for GitHub's scheduling delays; 17 */6 * * * is usually more punctual.
Kubernetes CronJob
apiVersion: batch/v1
kind: CronJob
metadata:
name: every-6-hours
spec:
schedule: "0 */6 * * *"
timeZone: "Etc/UTC"
concurrencyPolicy: Forbid
startingDeadlineSeconds: 1800
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: job
image: alpine:3.20
command: ["/bin/sh", "-c", "echo running"]With only four runs a day, a 30-minute deadline gives a generous retry window if the cluster was busy at the scheduled time.
systemd timer
# /etc/systemd/system/myjob.timer
[Unit]
Description=Every 6 hours
[Timer]
OnCalendar=*-*-* 00/6:00:00
Persistent=true
[Install]
WantedBy=timers.targetEquivalent explicit form: *-*-* 00,06,12,18:00:00.
When to use every 6 hours
- Refreshing OAuth tokens or API keys with a 12- or 24-hour lifetime.
- Incremental backups between a nightly full backup.
- Regenerating sitemaps or product feeds for marketplaces that re-crawl a few times a day.
- Checking TLS certificate expiry or pulling updated blocklists.
Common pitfalls with 0 */6 * * *
* */6 * * * runs every minute, not every 6 hours
This is the most common mistake with hour steps. With * in the minute field, the job runs at 00:00, 00:01 … 00:59, then again from 06:00 to 06:59, and so on: 240 runs a day. Always set the minute explicitly.
# WRONG: every minute during hours 0, 6, 12, 18 (240 runs/day)
* */6 * * *
# RIGHT: once at the start of hours 0, 6, 12, 18 (4 runs/day)
0 */6 * * *The grid starts at midnight, not at deploy time
Deploying at 13:30 does not give you runs at 19:30 and 01:30. The next run is 18:00. If you want a different phase, list the hours or use a range-step such as 0 3-23/6 * * * (03:00, 09:00, 15:00, 21:00).
Only use steps that divide 24
*/6 works because 24 is divisible by 6. */5 in the hour field gives 0, 5, 10, 15, 20 and then 0 again, so the last gap is only 4 hours. Use 2, 3, 4, 6, 8 or 12 for evenly spaced hour steps.
Related cron expressions
Need a different schedule? Paste 0 */6 * * * into the Cron Builder and edit it, browse all cron expressions, read the cron syntax guide or copy from the cron examples list.
Frequently Asked Questions
What does 0 */6 * * * mean?▾
Every 6 hours on the hour: at 00:00, 06:00, 12:00 and 18:00 in the scheduler's timezone. The 0 is the minute and */6 is the hour step.
What is the AWS cron expression for every 6 hours?▾
cron(0 0/6 * * ? *), which fires at 00:00, 06:00, 12:00 and 18:00 UTC. Alternatively rate(6 hours), which keeps a 6-hour interval from whenever the schedule was created.
How do I run a cron job every 6 hours starting at 3 AM?▾
Use 0 3-23/6 * * * or the explicit list 0 3,9,15,21 * * *. Both run at 03:00, 09:00, 15:00 and 21:00.