Quarterly (1st of Every 3rd Month)
0 0 1 */3 * 0 0 0 1 */3 ? 0 0 1 */3 * 0 0 1 */3 ? * 0 0 0 1 */3 * 0 0 1 */3 * Runs at 00:00 on the 1st of January, April, July, and October — 4 invocations per year, once per calendar quarter.
Use in your stack
# Quarterly — 1st of Jan, Apr, Jul, Oct at midnight
0 0 1 */3 * /usr/local/bin/quarterly-report.sh
{ "cron": "0 0 0 1 */3 ?", "timezone": "UTC" }
apiVersion: batch/v1
kind: CronJob
metadata:
name: quarterly-report
spec:
schedule: "0 0 1 */3 *"
timeZone: "UTC"
jobTemplate:
spec:
template:
spec:
containers:
- name: report
image: my-image:latest
restartPolicy: OnFailure
cron(0 0 1 */3 ? *)
@Scheduled(cron = "0 0 0 1 */3 *")
public void quarterly() { /* ... */ }
on:
schedule:
- cron: '0 0 1 */3 *'
Next runs
Pick a timezone to see when this expression fires next.
Next 10 runs
- 012026-10-01T00:00:00.000Z
- 022027-01-01T00:00:00.000Z
- 032027-04-01T00:00:00.000Z
- 042027-07-01T00:00:00.000Z
- 052027-10-01T00:00:00.000Z
- 062028-01-01T00:00:00.000Z
- 072028-04-01T00:00:00.000Z
- 082028-07-01T00:00:00.000Z
- 092028-10-01T00:00:00.000Z
- 102029-01-01T00:00:00.000Z
Variations
Common use cases
- Quarterly fiscal or usage reports.
- Quarterly billing or subscription renewals.
- Rotating credentials on a quarterly cadence.
- Quarterly data archival or compliance jobs.
Gotchas
- `*/3` in the month field steps from month 1, so it fires in January, April, July, October — calendar quarters, not fiscal quarters. For a fiscal year starting in a different month, use an explicit list like `0 0 1 2,5,8,11 *`.
- AWS EventBridge: `0 0 1 */3 ? *` — uses `?` for day-of-week.
- The 1st of the month always exists, so this is a safe date anchor.
0 0 1 */3 * is the quarterly schedule — the 1st of January, April, July, and October. The key subtlety is that */3 anchors to January; if your fiscal quarters start elsewhere, switch to an explicit month list.
Frequently asked questions
What does `0 0 1 */3 *` mean?
Minute `0`, hour `0` (midnight), day-of-month `1`, month `*/3` (every 3rd month from January), day-of-week `*` (any). So the job fires at midnight on the 1st of January, April, July, and October — four times a year, once per calendar quarter.
Which months does `*/3` actually fire in?
January, April, July, and October — `*/3` steps from the field's minimum (1 = January) by 3. It does NOT center on the current month. For a fiscal year that starts in a different month, use an explicit month list instead, like `0 0 1 2,5,8,11 *` for February/May/August/November.
How do I run on the last day of each quarter instead of the first?
Last-day-of-quarter is harder — the quarter-end months (March, June, September, December) have different lengths. In Quartz or AWS EventBridge use `L` in the day-of-month field with a month list: `0 0 0 L 3,6,9,12 ?`. In Unix cron, schedule on the 28th-31st of those months and check inside your script.
Is there a `@quarterly` shortcut?
No — standard cron has `@yearly`, `@monthly`, `@weekly`, `@daily`, `@hourly`, but no `@quarterly`. Write the full expression `0 0 1 */3 *`. (systemd timers do have a `quarterly` OnCalendar shortcut, but crontab does not.)
Browse all cron patterns
Every schedule Cronuru documents, with its expression and code snippets for six dialects.