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
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:
- Linux
crontab-0 0 1-30/3 * * /path/to/script.sh - Vercel cron jobs - declare in
vercel.json. - node-cron, robfig/cron and Kubernetes CronJob.
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:000 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-5Weekdays at 18:00
- 0 0 1 * *Once a month, on the 1st at midnight
Cheatsheet
Full cheatsheet| Field | Req. | Range | Wildcards |
|---|---|---|---|
| minute | yes | 0-59 | , - * / |
| hour | yes | 0-23 | , - * / |
| day of month | yes | 1-31 | , - * / |
| month | yes | 1-12 or JAN-DEC | , - * / |
| day of week | yes | 0-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 * *
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 * *
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 referencePlatforms
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 * * ? *
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 * * ?
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 matrixCan 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 guideDebugging
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 callsGeneral
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