Cron every 3 hours: 0 */3 * * *
0 */3 * * * runs eight times a day at midnight, 03:00, 06:00, 09:00, 12:00, 15:00, 18:00 and 21:00.
At a glance
- Expression
- 0 */3 * * *
- Fires
- 8 times a day, 56 times a week, 2,920 times in a non leap year.
- Restricted fields
- Minute pinned to 0, hour stepped by 3. Date fields open.
- Equivalent macro
- None.
- Hours matched
- 0, 3, 6, 9, 12, 15, 18, 21.
- Fiscal offset variant
- 0 1-23/3 * * * shifts the whole set to 01:00, 04:00, 07:00 and so on.
In detail
Three divides 24 into eight equal pieces, so this is one of the few multi hour schedules with no awkward remainder. The gap from 21:00 to the next run at 00:00 is three hours, exactly like every other gap, which means a job that assumes uniform spacing between runs is safe here in a way it is not with a step of five or seven.
Eight runs a day is a common choice for syncing with a partner system that publishes on an unpredictable cadence. It is frequent enough that nothing sits stale for long, and infrequent enough that each run can afford to do real work: a full comparison rather than an incremental one, which removes a whole class of drift bugs.
This schedule is also the backbone of the two line trick for a 90 minute cycle, because 90 minutes and three hours share a period. If you find yourself writing 0 */3 alongside 30 1-23/3, that is what is going on, and the pair should be commented so the next reader does not delete one of them.
The first run of the day is at midnight, which puts it in the same slot as nightly maintenance on most systems. Shifting the whole set with 0 1-23/3 keeps the three hour spacing and moves every run one hour later, which is usually enough to get out of the way of backups without changing anything else.
Examples
0 */3 * * *0 1-23/3 * * *Fires at 01:00, 04:00, 07:00, 10:00, 13:00, 16:00, 19:00, 22:00.
0 */3 * * * /usr/bin/flock -n /var/lock/reconcile.lock /opt/app/bin/reconcile.sh >> /var/log/reconcile.log 2>&1Things that catch people out
- Eight runs a day means a failure waits up to three hours for a retry. If that is too long, add a retry inside the script rather than shortening the schedule.
- 0 */3 * * * and 0 0-23/3 * * * are the same set. The longer form only helps when the start value differs from the field minimum.
- */3 in the month field also means every third value, but there it counts months from January and gives four runs a year, not eight a day.
Try it: Cron Expression Parser
Paste any five or six field expression to get a plain English description, a per field breakdown and the next run times in your local time.
Cron Expression Parser
LOCAL · Browser-OnlyParse cron expressions and see the next scheduled run times
Supports 5-field (minute hour day month weekday), 6-field (with seconds), named values (JAN, MON), and @macros (@daily, @hourly, ...)
Use the dropdowns below to build your cron expression visually, or type a custom value in each field.
Human-Readable Description
Every 5 minutes
Field Breakdown
| Field | Allowed | Value | Meaning |
|---|---|---|---|
| Minute | 0-59 | */5 | every 5 minute(s) |
| Hour | 0-23 | * | every hour |
| Day of Month | 1-31 | * | every day of month |
| Month | 1-12 | * | every month |
| Day of Week | 0-7 | * | every day of week |
Related cron expressions
All cron expressions →Cron every 2 hours: 0 */2 * * *
0 */2 * * * fires 12 times a day on even hours from 00:00 to 22:00. Use 0 1-23/2 * * * to run on odd hours instead, same twelve runs.
Cron every 4 hours: 0 */4 * * *
0 */4 * * * fires six times a day at 00:00, 04:00, 08:00, 12:00, 16:00 and 20:00. Even spacing, and how to move the set off midnight.
Cron every 90 minutes: the two line crontab that works
Ninety minutes crosses the hour boundary, so no single cron expression covers it. Two lines stepping the hour field by 3 give an exact 16 run day.
Cron every 6 hours: 0 */6 * * *
0 */6 * * * fires four times a day at 00:00, 06:00, 12:00 and 18:00. Even spacing, quarter day alignment, and how to shift the whole set.
Cron every 5 hours: 0 */5 * * * and the four hour gap
0 */5 * * * fires five times a day at 00:00, 05:00, 10:00, 15:00 and 20:00, then waits four hours instead of five. Here is why and what to do.
Cron every 8 hours: 0 */8 * * *
0 */8 * * * fires three times a day at 00:00, 08:00 and 16:00. Shift aligned, evenly spaced, and easy to move with a start at step form.
Tools for this
- Cron Expression Parser Free online cron expression parser - parse cron expressions and see the next scheduled run times
- Crontab Generator Free online crontab generator - build cron expressions visually with an intuitive interface