Cron every quarter

At 00:00 on day 1 of the month in JAN, APR, JUL, OCT.

0 0 1 JAN,APR,JUL,OCT *

minute · hour · day of month · month · day of week

What this expression selects

At 00:00 on day 1 of the month in JAN, APR, JUL, OCT. This is a five-field calendar schedule, interpreted in the timezone you configure. It is not an instruction to wait a fixed duration after the last completion.

Common mistakes

This runs on January 1, April 1, July 1 and October 1. It is anchored to calendar quarters, not 90 days after the last run.

Next five runs in UTC

Computed at build time from . These are examples, not a live clock.

2027-01-01T00:00:00.000Z
2027-04-01T00:00:00.000Z
2027-07-01T00:00:00.000Z
2027-10-01T00:00:00.000Z
2028-01-01T00:00:00.000Z

A nearby variation

0 0 1 JAN *

At 00:00 on day 1 of the month in JAN. Compare it with the expression above before copying; the selected fields change the calendar times.

Preview live runs in your timezone ↗

Monitor the completed work

Copy a private ping URL from a CronPulse check. Set its schedule to 0 0 1 JAN,APR,JUL,OCT * in the same timezone as your job runner, and add grace for runtime and scheduling delay. Send success after the work finishes, not when it is enqueued.

Add success and exit-code reporting to crontab. Missing pings are evaluated once a minute; this is not sub-minute monitoring.

Questions

Which time zone does this use?
The examples use UTC. Choose your IANA time zone in the cron helper; your host scheduler must use the same zone.
Does cron wait for the last job to finish?
This expression chooses clock times. It does not provide locking or an elapsed timer. Configure concurrency in the job runner.

Related schedules

Cron every year

Cron every 3 minutes

Give your next job a heartbeat.

20 checks free. No card. Built in Ireland.

Create your first check ↗