/

Cron: Every Quarter

0 0 1 1,4,7,10 * fires four times a year — midnight on January 1st, April 1st, July 1st, and October 1st, the standard calendar-quarter boundaries. It's the natural schedule for quarterly reports, billing cycles, and infrequent maintenance that only needs to run a handful of times a year.

0 0 1 1,4,7,10 *

Examples & Variations

0 0 1 1,4,7,10 *

Every quarter, midnight on the 1st

Try it

0 6 1 1,4,7,10 *

Every quarter, 6 AM instead of midnight

Try it

0 0 2 1,4,7,10 *

Every quarter, on the 2nd instead of the 1st

Try it

Common Mistakes

  • Assuming there's a single 'every quarter' shortcut nickname — unlike @daily or @monthly, cron has no @quarterly alias; the month list (1,4,7,10) has to be written out explicitly.
  • Confusing calendar quarters with a company's fiscal quarters — if your organization's fiscal year doesn't start in January, the month list needs to reflect your actual fiscal quarter-start months, not the calendar-quarter defaults.
  • Adding a day-of-week restriction expecting it to mean 'the closest weekday to the 1st' — cron's OR semantics between day-of-month and day-of-week means restricting both fields runs the job on the 1st of those months OR any matching weekday, not a combined condition. Leave day-of-week as * for a genuinely quarterly schedule.

Best Practices

  • Write out the month list explicitly (1,4,7,10) since there's no quarterly shortcut nickname to fall back on.
  • Keep day-of-week as * for a genuinely quarterly schedule — restricting it introduces cron's OR-based day-of-month/day-of-week interaction, which rarely does what's intuitively expected.
  • Document which quarter-start convention (calendar vs. fiscal) the schedule follows directly in a comment above the crontab entry, since '1,4,7,10' alone doesn't communicate that context to the next person reading it.

Frequently Asked Questions

Is there an @quarterly shortcut like @daily or @monthly?
No — standard cron's nickname shortcuts (@yearly, @monthly, @weekly, @daily, @hourly) don't include a quarterly option. Use the explicit month list (0 0 1 1,4,7,10 *) instead.
What if my fiscal year doesn't start in January?
The expression itself just runs on whichever calendar months you list — if your fiscal quarters start on different months than January/April/July/October, adjust the month list to match your organization's actual fiscal quarter-start months.
Can I restrict this to weekdays only, skipping weekend quarter-starts?
Not directly with a day-of-week field, because of cron's day-of-month/day-of-week OR semantics — adding 1-5 to the day-of-week field would make the job also run on every weekday, not just weekday quarter-starts. Handle that specific check inside the job itself instead.