PatternCron

Quarterly, on the first morning

Quarterly reports without a calendar lookup: a step in the month field lands on January, April, July and October automatically.

Last updated

Pattern
0 9 1 */3 *
Open in Crontab Schedule Creator

In plain English

  • Fires 09:00 on 1 Jan, 1 Apr, 1 Jul, 1 Oct
  • 4 runs per year

Why it’s written this way

The month field runs 1–12, and a step counts from the range's start — so */3 means months 1, 4, 7 and 10: exactly the calendar quarters. Combined with day-of-month 1 and hour 9, that's 09:00 on the first day of each quarter.

The explicit list 1,4,7,10 says the same thing and is arguably more readable in a crontab someone else maintains — steps earn their keep when the list would be long.

Edge cases to know

  • →A step counts from the FIELD's start, not from when you installed the job — */3 can never mean February, May, August, November; spell those as a list (2,5,8,11).
  • →Quarterly jobs are rare enough to be forgotten — log each run somewhere a human looks, or the first missed quarter goes unnoticed until year-end.

Part by part

0 9
Nine in the morning exactly, so a quarterly job that fails does so while someone is likely to see it.
1
Day-of-month fixed to the first, which is what anchors each run to the start of a month.
*/3
A step in the month field: every third month counting from January, so January, April, July and October — the calendar quarters.

Common mistakes

  • 0 9 1 */4 *

    A step of four gives January, May and September — three runs a year, not four. Quarters are three months apart, and the step is the gap rather than the count of runs.

    0 9 1 */3 *
  • 0 9 1 */3 1

    Adding a day-of-week triggers cron's OR rule between the two day fields, so instead of narrowing to quarter-starts that fall on a Monday, this runs on every quarter start AND every Monday of the year.

  • 0 9 1 3,6,9,12 *

    Not wrong so much as a different quarter definition — this is March, June, September and December, which suits a fiscal year ending in February. Worth stating explicitly in a comment either way, because the reader cannot tell which was intended.

Questions

Which months does */3 actually hit?

January, April, July and October. The step counts from the start of the field's range rather than from the current month, so installing it in February does not shift the sequence — it still fires in April.

How do I match a fiscal year that does not start in January?

Use an explicit list instead of a step. For a year beginning in April, 4,7,10,1 states exactly which months are meant and leaves nothing for the next reader to infer.

Is a quarterly cron job reliable enough for something that matters?

Treat it with suspicion. A job that runs four times a year has almost no chance of being noticed when it breaks, so it needs an explicit success signal — a monitoring heartbeat or a message to a channel someone reads.

What if the first of the month falls on a weekend?

It runs anyway; cron does not know about weekends unless you tell it. Since the day-of-week field cannot be used here without triggering the OR rule, the adjustment has to happen inside the script.

Related in Patterns