Quick answer
The cron expression for every 6 hours is 0 */6 * * *. The */6 step in the hour field matches hours 0, 6, 12 and 18, and the 0 in the minute field runs the job on the hour, so it fires four times a day at 00:00, 06:00, 12:00 and 18:00. The list form 0 0,6,12,18 * * * is identical.
- Live next runs
- Any time zone
- Field-by-field breakdown
- Seven platform snippets
- Daylight saving aware
How to use this schedule
- 1Copy
0 */6 * * *with the Copy expression button. - 2Check Next runs in your time zone to confirm it fires when you expect, including around daylight saving changes.
- 3Pick your platform under Use it on your platform and copy the ready-made crontab line, workflow, manifest or timer.
- 4Need a different time or day? Click Customize to open it in the cron expression generator and change any field.
What does 0 */6 * * * mean?
The hour step */6 divides the day into four equal blocks starting at midnight. The fixed minute of 0 runs the job on the hour, so you get four runs, each exactly six hours after the last, including the jump from 18:00 to the next midnight.
Six different phases are possible. A few useful ones:
| Expression | Runs at |
|---|---|
0 */6 * * * | 00:00, 06:00, 12:00, 18:00 |
0 3-23/6 * * * | 03:00, 09:00, 15:00, 21:00 |
30 1-23/6 * * * | 01:30, 07:30, 13:30, 19:30 |
0 0,6,12,18 * * * | Same as the first row, as a list |
Midnight is when many daily jobs (backups, reports, log cleanup) already run, so the 3-23/6 phase is a popular way to keep a six-hourly job out of their way.
What is a six-hour schedule good for?
Four runs a day is the classic cadence for housekeeping that should not wait a full day but does not need to be frequent:
- Checking certificate and domain expiry dates
- Refreshing blocklists, GeoIP data or other reference datasets
- Compacting or pruning logs and temporary files
- Re-indexing search for content that changes a few times a day
Because there are only four runs, each one matters. Make the job idempotent (safe to run twice) and able to catch up if a run was missed while the server was down, because cron will not retry it. Also bound its runtime: a run that hangs for six hours collides with the next one.
Think about which zone the four times belong to. On a UTC server, 0 */6 * * * runs at 20:00, 02:00, 08:00 and 14:00 in New York during daylight time. Need more checkpoints? Try every 3 hours. Fewer? Every 12 hours.
What does each field in 0 */6 * * * mean?
| Field | Value | Allowed | Meaning |
|---|---|---|---|
| Minute | 0 | 0–59 | at minute 0 (on the hour) |
| Hour | */6 | 0–23 | every 6 hours: 00:00, 06:00, 12:00 and 18:00 |
| Day of month | * | 1–31 | every day of the month |
| Month | * | 1–12, JAN–DEC | every month |
| Day of week | * | 0–7 (0 and 7 are Sunday), SUN–SAT | every day of the week |
Read together: At 00:00, 06:00, 12:00 and 18:00 every day.
How do I adjust 0 */6 * * * to my own schedule?
Small edits to 0 */6 * * * cover most real-world needs:
| Expression | What it does |
|---|---|
0 0,6,12,18 * * * | The same schedule as an explicit list of hours |
0 3-23/6 * * * | Every 6 hours at 03:00, 09:00, 15:00 and 21:00 |
15 */6 * * * | Every 6 hours at quarter past (00:15, 06:15, 12:15, 18:15) |
0 */6 * * 1-5 | Every 6 hours on weekdays only |
0 */12 * * * | Every 12 hours, twice a day |
Need something else? Click Customize at the top of the page to open this schedule in the cron expression generator and change any field.
Related schedules: Every 4 hours · Every 3 hours · Every 12 hours · Twice a day
Browse all schedules in the cron schedule library.
How do I run 0 */6 * * * in crontab, GitHub Actions, Kubernetes and the cloud?
| Platform | Write it as | Time zone |
|---|---|---|
| Linux crontab | 0 */6 * * * | Server's time zone; CRON_TZ= in cronie |
| GitHub Actions | - cron: "0 */6 * * *" | UTC by default; add timezone: (IANA name) |
| Kubernetes CronJob | schedule: "0 */6 * * *" | Set timeZone: (1.27+) |
| Cloudflare Workers | 0 */6 * * * | UTC only; numbers weekdays from 1 = Sunday, so use names |
| Vercel Cron Jobs | 0 */6 * * * | UTC only; more than once a day needs Pro (Hobby: once a day) |
| AWS EventBridge Scheduler | cron(0 */6 * * ? *) | Takes a time zone; legacy scheduled rules are UTC only |
| systemd timer | OnCalendar=*-*-* 0/6:00:00 | Add a zone after the time, e.g. Europe/London |
In a crontab (crontab -e), the full line looks like this:
0 */6 * * * /path/to/job.sh >> /var/log/job.log 2>&1The live panel at the top of the page builds complete, copy-ready files for each platform (workflow, CronJob manifest, wrangler.toml, vercel.json, AWS CLI and systemd units) and can shift the schedule to UTC for platforms that need it.
What can go wrong with 0 */6 * * *?
- Midnight is crowded with daily jobs on many servers. Shift the phase with
0 3-23/6 * * *so the 00:00 run doesn't compete with them. 0 */6 * * *on a UTC server runs at 20:00, 02:00, 08:00 and 14:00 in New York during daylight time. If the times matter to people, decide which zone the schedule lives in.- A hung run blocks the next one if you use
flock, and runs alongside it if you don't. Add a timeout too:timeout 5h your-commandstops a stuck run before the next start. */6 * * * *(step in the minute field) runs every 6 minutes, a frequent copy-paste slip.- In a zone with daylight saving time, a schedule with
*in the minute or hour field follows the wall clock: the spring-forward night loses an hour of runs and the fall-back night repeats one. Servers on UTC never see this.
Frequently asked questions
Last updated by the Playxoft engineering team.