Every 6 hours
A four-times-a-day cadence for cache warms and report refreshes: */6 lands cleanly on 00:00, 06:00, 12:00 and 18:00.
Last updated
In plain English
- Fires at 00:00, 06:00, 12:00 and 18:00
- 4 runs per day
Why it’s written this way
*/6 in the hour field takes the range 0–23 and keeps every sixth value starting from 0 — 0, 6, 12, 18 — four evenly spaced runs across the day. Minute stays 0, so each one fires on the dot.
Because 6 divides 24 evenly, the step never resets mid-cycle; every day looks identical. That isn't true of every divisor, so it's worth checking that a step actually tiles the field's range before trusting the spacing.
Edge cases to know
- →Four fixed times a day means every run lands during business hours somewhere in the world; if the job is heavy, that's worth knowing before it competes with real traffic on a shared box.
- →A deploy or restart that happens to land near one of the four windows can eat that run silently — there's no cron-level alert for a job that never started.
- →If the real requirement is 'four times spread through my working day' rather than 'every six hours counting from midnight,' this expression is the wrong shape — list four explicit hours instead, e.g. 0 8,12,16,20 * * *.
Part by part
- 0 */6
- Minute zero of every sixth hour, counting from zero — so 00:00, 06:00, 12:00 and 18:00. The step always starts at the bottom of the range, not from when you installed it.
- * * *
- Calendar fields open, so the four daily runs repeat every day of the year.
Common mistakes
0 */6 * * * expecting it to start six hours from nowSteps count from the beginning of the field's range, not from installation time. Adding this at 09:00 means the next run is 12:00, three hours away, which surprises people testing a new schedule.
0 */7 * * *Seven does not divide 24, so the runs are 00:00, 07:00, 14:00 and 21:00 — and then only three hours to midnight. Any step that does not divide its range evenly produces an uneven gap at the boundary.
0 0,6,12,18 * * * written as 0 0-18/6 * * *Valid, and it excludes nothing while looking like it restricts a window. If the intent is genuinely all day, */6 says so more plainly.
Questions
Which four times does this actually fire?
Midnight, 06:00, 12:00 and 18:00 in the daemon's timezone. Writing them out in a comment above the line saves the next reader from working it out, particularly where the step is less obvious than six.
How does it behave across a daylight saving change?
The runs stay pinned to those clock times, so the day of the change has either a five-hour or a seven-hour gap. For anything measuring intervals, run the daemon in UTC and convert for display instead.
Should I use a step or a list here?
A step, since six divides the day evenly and the intent is obvious. Lists earn their place when the times are irregular, which no step can express.
What if a run takes longer than six hours?
The next one starts on top of it. Six hours feels like ample headroom right up until a data volume doubles, so a lock is worth adding while it still seems unnecessary.