Skip to main content

Cron every 2 days

0 0 */2 * *

At 00:00, every 2 days.

Next runs · UTC

Calendar

September 2026 · UTC

0 runs

About this tool

Run a cron every 2 days with 0 0 */2 * *. The day-of-month step expands to 1, 3, 5, …, 29, 31. Note that the cadence resets at every month boundary - strict 48-hour intervals aren't natively expressible in cron.

The cron expression for every 2 days

0 0 */2 * *

Same expression as cron-every-other-day. The day-of-month step */2 fires on the 1st, 3rd, 5th, …, 29th, then resets to 1 next month. Cron has no native “every 48 hours”; for strict 48-hour spacing, schedule daily and gate the work on a state file.

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 2 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 */2 * * 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 */2 * * - every 2 days at 09:00
  • 0 0 2-30/2 * * - every 2 days starting from the 2nd (even days)

Gotchas when running every 2 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 2 days. For a strict interval, trigger daily in UTC and gate with epoch-day modulo 2.
  • 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 */2 * * actually schedule?

It runs at 09:00 on odd-numbered calendar dates, then restarts that pattern on the 1st of each month. It is not a continuous 48-hour interval. Expression: 0 9 */2 * *

Open in editor

Days and months

Does 0 0 */2 * * stay exactly 48 hours apart?

No. */2 is a day-of-month step that resets on the 1st; a run on the 31st can be followed by another on the 1st, only one day later. Expression: 0 0 */2 * *

Open in editor
How many monthly runs does */2 in day-of-month produce?

It produces 14 runs in a 28-day February, 15 in a 30-day month, and 16 in a 31-day month. The selected dates are the odd numbers that exist. Expression: 0 0 */2 * *

Open in editor
How do I select even calendar dates instead of odd dates?

Use 0 0 2-30/2 * *. It selects the 2nd, 4th, through 30th, but still resets each month and therefore is not a strict 48-hour timer. Expression: 0 0 2-30/2 * *

Open in editor

Timezones and DST

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

Yes. Two selected local dates around a clock change can be 47 or 49 elapsed hours apart. Trigger and compute epoch-day parity in UTC when exact 48-hour spacing matters.

Timezone and DST reference

Platforms

How do I implement every 2 days with AWS EventBridge?

Use the daily UTC trigger cron(0 0 * * ? *), then apply Unix-day parity in the target. An EventBridge day-of-month step also resets monthly and is not a strict two-day interval. Expression: 0 0 * * ? *

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

Use the daily trigger 0 0 0 * * ?, then let the job check Unix-day parity or persisted state. Quartz day-of-month steps reset each month too. Expression: 0 0 0 * * ?

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

Yes, by scheduling daily and exiting on alternate UTC epoch days. GitHub Actions defaults to UTC, supports an optional IANA timezone, and its five-minute floor does not affect a daily trigger.

Cron dialect matrix
Can Vercel Hobby run the daily wrapper for every 2 days?

Yes. Vercel Hobby's once-per-day limit permits the daily UTC trigger, and the endpoint can exit on the unselected epoch-day parity.

Vercel cron guide

Debugging

How short can the */2 gap be at a month boundary?

One day. A selected 31st or leap-day 29th can be followed by the next month's selected 1st; other boundaries commonly leave two days.

Crontap

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

Yes. Crontap can run the daily HTTP trigger with retries, while the endpoint's Unix-day parity or persisted state enforces the strict two-day cadence.

Schedule API calls

General

What is the cron expression for every 2 days?

0 0 */2 * * matches calendar dates 1, 3, …, 31 and resets on the 1st; it is not a strict 48-hour interval. For strict spacing, trigger daily in UTC and gate with epoch-day parity.

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 48-hour cadence requires a daily UTC trigger and epoch-day parity.

Does 0 0 */2 * * 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 48-hour cadence needs a daily UTC trigger plus epoch-day parity; 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