Interval Schedules

Cron Job Every 2 Days at Midnight – 0 0 */2 * *

The expression 0 0 */2 * * triggers at 00:00 on every 2nd day-of-month, starting from day 1 — so it fires on days 1, 3, 5, 7, and so on. Because it steps through the day-of-month field (1–31) rather than tracking elapsed time, the last interval of a month may be shorter than 2 days: in a 31-day month the final fire is on day 31, followed immediately by another on day 1 of the next month, giving a gap of just 1 day. If a strict 48-hour cadence is required regardless of month boundaries, consider using a dedicated scheduler like CronJobPro with interval-based scheduling instead.

Cron Expression
0 0 */2 * *
0
Minute
(0-59)
0
Hour
(0-23)
*/2
Day of Month
(1-31)
*
Month
(1-12)
*
Day of Week
(0-6)

How It Works

The expression 0 0 */2 * * triggers at 00:00 on every 2nd day-of-month, starting from day 1 — so it fires on days 1, 3, 5, 7, and so on. Because it steps through the day-of-month field (1–31) rather than tracking elapsed time, the last interval of a month may be shorter than 2 days: in a 31-day month the final fire is on day 31, followed immediately by another on day 1 of the next month, giving a gap of just 1 day. If a strict 48-hour cadence is required regardless of month boundaries, consider using a dedicated scheduler like CronJobPro with interval-based scheduling instead.

Common Use Cases

  • Regenerate and cache a heavy analytics or reporting dataset that does not need daily freshness but must be ready for business reviews every other day.
  • Run a database VACUUM, index rebuild, or statistics update on a moderate-traffic application where nightly runs would be too frequent and weekly too stale.
  • Poll a third-party API for updated pricing, inventory, or exchange-rate data and sync changes to a local datastore on a 2-day cadence to stay within rate limits.
  • Send a digest email or push notification to users summarising their activity or pending actions from the past 48 hours without overwhelming them with daily messages.

Monitor a Job on This Schedule

Writing the 0 0 */2 * * schedule is only half the job. Cron fires silently — if the run is skipped, the server is down, or the script fails, nothing tells you. A heartbeat monitor closes that gap: your job pings a URL on success, and you get an alert the moment an expected run goes missing. CronJobPro can run this schedule for you as an HTTP job, or watch a job you run elsewhere (cron, CI, Kubernetes) with a dead-man's-switch check.

Preview the next run times for 0 0 */2 * *

Schedule This Cron Job Now

Create a free CronJobPro account and use 0 0 */2 * * to schedule HTTP requests automatically — with monitoring, retries, and notifications built in.

Frequently Asked Questions

What does 0 0 */2 * * mean in cron?

The expression 0 0 */2 * * triggers at 00:00 on every 2nd day-of-month, starting from day 1 — so it fires on days 1, 3, 5, 7, and so on. Because it steps through the day-of-month field (1–31) rather than tracking elapsed time, the last interval of a month may be shorter than 2 days: in a 31-day month the final fire is on day 31, followed immediately by another on day 1 of the next month, giving a gap of just 1 day. If a strict 48-hour cadence is required regardless of month boundaries, consider using a dedicated scheduler like CronJobPro with interval-based scheduling instead.

How do I use this cron expression?

On Linux/macOS, edit your crontab with crontab -e and add:
0 0 */2 * * /path/to/your/script.sh
Or use CronJobPro to schedule HTTP requests with this expression — no server required.

What timezone does cron use?

By default, cron uses the system timezone. CronJobPro lets you set a specific timezone per job, so your schedules are predictable regardless of server location.

Cron Job Every 2 Days at Midnight – 0 0 */2 * * | CronJobPro