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
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.