Skip to main content

Cron every 3 days

0 0 1-30/3 * *

At 00:00, every 3 days, between day 1 and 30 of the month.

Next runs · UTC

Calendar

September 2026 · UTC

0 runs

About this tool

Run a cron every 3 days with 0 0 1-30/3 * *. Ten runs per month at every 3rd day-of-month starting from the 1st. The cadence resets at the month boundary; see the pillar guide for the runtime-check workaround.

The cron expression for every 3 days

0 0 1-30/3 * *

The day-of-month range 1-30/3 expands to 1, 4, 7, 10, 13, 16, 19, 22, 25, 28 - ten runs per month. The 31st and the month boundary reset the phase, so the gap between runs occasionally shrinks to 1-2 days at the boundary. For strict 72-hour intervals, schedule daily and check `date +%j` modulo 3.

See the dedicated guide for the full breakdown: Cron every day.

Paste it into the editor above to see the next runs on a calendar.

When to run a job every 3 days

  • Backups and snapshots that can follow matching calendar dates despite the monthly reset.
  • Retention and archival jobs where a variable month-boundary gap is acceptable.
  • Calendar-date checks that do not require a fixed elapsed-time interval.

Run this cron anywhere

0 0 1-30/3 * * is five-field cron syntax. It works as is in:

AWS EventBridge and Quartz use six-field expressions with a ? in one of the day fields, so convert first:

  • AWS EventBridge - cron(minute hour day-of-month month ? year); see the AWS guide.
  • Quartz Scheduler - prepend a seconds field (0) and replace one day field with ?; see the Quartz guide.

Useful variations

  • 0 9 1-30/3 * * - every 3 days at 09:00
  • 0 0 2-31/3 * * - every 3 days starting from the 2nd

Gotchas when running every 3 days

  • The step resets every month - The day-of-month field restarts on the 1st, so the boundary gap varies with the month length and selected range instead of staying 3 days. For a strict interval, trigger daily in UTC and gate with epoch-day modulo 3.
  • Timezone and daylight saving - DST handling is scheduler-specific: Vixie/cronie can skip or double local matches; GitHub advances nonexistent local times; EventBridge Scheduler skips spring and runs once in the fall overlap. UTC-only Vercel and Cloudflare schedules are unaffected.

Examples

  • 0 18 * * *
    Every day at 18:00
  • 0 */5 * * *
    Every 5 hours
  • 0 18 * * 1-5
    Weekdays at 18:00
  • 0 0 1 * *
    Once a month, on the 1st at midnight

Cheatsheet

Full cheatsheet
FieldReq.RangeWildcards
minuteyes0-59, - * /
houryes0-23, - * /
day of monthyes1-31, - * /
monthyes1-12 or JAN-DEC, - * /
day of weekyes0-6 or names; some dialects use 0-7 or 1-7 — see Dialects, - * /

Frequently asked questions

Timing

What does 0 9 1-30/3 * * schedule?

It runs at 09:00 on the 1st, 4th, 7th, through 28th of each month. It is a calendar pattern, not a continuous 72-hour interval. Expression: 0 9 1-30/3 * *

Open in editor

Days and months

How does 1-30/3 differ from */3 in day-of-month?

1-30/3 selects 1, 4, …, 28 and excludes the 31st. */3 also selects the 31st when present; both reset on the next 1st, so neither is a strict 72-hour interval. Expression: 0 0 1-30/3 * *

Open in editor
What calculation gives a strict three-day UTC phase?

Trigger daily in UTC, then gate with day=$(( $(date +%s) / 86400 )); (( day % 3 == 0 )) || exit 0. Unix-day modulo continues across month and year boundaries, keeping selected UTC midnights 72 hours apart.

Why is Unix-day modulo safer than day-of-year modulo 3?

Unix-day numbering is continuous, while date +%j resets to 001 each January. Because 365 is not divisible by three, day-of-year modulo changes the phase at New Year.

Timezones and DST

Does DST affect an every-3-days local-time schedule?

Yes. The same local time three dates later can be 71 or 73 elapsed hours away across a DST change. Use UTC epoch-day modulo for exact 72-hour spacing.

Timezone and DST reference

Platforms

How do I implement every 3 days with AWS EventBridge?

Use cron(0 0 * * ? *) as a daily UTC trigger, then apply Unix-day modulo three in the target. EventBridge day-of-month steps reset monthly. Expression: 0 0 * * ? *

Open in editor
AWS cron guide
How do I implement every 3 days with Quartz?

Use 0 0 0 * * ? to trigger daily, then gate the job with epoch-day modulo three or persisted state. Quartz calendar fields cannot maintain a strict three-day interval across months. Expression: 0 0 0 * * ?

Open in editor
Quartz cron guide
Can GitHub Actions run a strict every-3-days workflow?

Yes. Schedule the workflow daily and skip days whose Unix-day number is not divisible by three. GitHub Actions defaults to UTC, and its five-minute floor does not affect daily scheduling.

Cron dialect matrix
Can Vercel Hobby run the daily three-day wrapper?

Yes. The daily UTC trigger fits Vercel Hobby's once-per-day limit; the endpoint exits unless the Unix-day modulo check selects that date.

Vercel cron guide

Debugging

How should a stateful three-day wrapper handle failures?

Write the last-success timestamp only after completion and protect the check with a lock. A pre-run update can turn one failed attempt into a six-day wait.

Crontap

Can Crontap run the daily trigger for a three-day wrapper?

Yes. Crontap can run the daily HTTP trigger with retries, while the endpoint's modulo check or persisted state enforces the three-day interval.

Schedule API calls

General

What is the cron expression for every 3 days?

0 0 1-30/3 * * matches calendar dates 1, 4, …, 28 and resets on the 1st; it is not a strict 72-hour interval. For strict spacing, trigger daily in UTC and gate with epoch-day modulo 3.

How can I verify which calendar dates this cron matches?

The editor shows the next 30+ matches on a calendar. Check dates around the 1st: this day-of-month step resets monthly, while a strict 72-hour cadence requires a daily UTC trigger and epoch-day modulo 3.

Does 0 0 1-30/3 * * work on every platform?

Linux cron, Vercel, node-cron, robfig, and Kubernetes accept this five-field calendar pattern, but it resets monthly everywhere. A strict 72-hour cadence needs a daily UTC trigger plus epoch-day modulo 3; AWS EventBridge and Quartz require six-field conversions.

What happens if the previous run is still going when the next one fires?

Most schedulers will start the new run anyway, leading to overlap. To prevent this, wrap the command with flock -n /tmp/myjob.lock /path/to/script.sh on Linux, or set concurrencyPolicy: Forbid on Kubernetes CronJob. Vercel and EventBridge may overlap runs if the previous one is still executing; make the handler idempotent.

Write the cron here. Run it on Crontap.

Point Crontap at any URL. Pick any cron. Done.

WordPress, Shopify, Railway, Cloud Run, Vercel, HubSpot, Ghost, your own box. If it answers HTTP, Crontap can drive it on a clock you can read, in the timezone that actually matters, and page you when something breaks.

1.9k+ teams · Free forever tier · No credit card