PatternCron
First day of every month
Monthly reports and invoice runs: 09:00 on the 1st of each month — and why "last day of the month" is famously harder.
Last updated
In plain English
- Fires at 09:00 on the 1st of every month
- 12 runs per year
Why it’s written this way
Minute 0, hour 9, day-of-month 1, any month, any weekday: the morning of the 1st, twelve times a year. Day-of-week stays * so the schedule is calendar-driven regardless of which weekday the 1st lands on.
Edge cases to know
- →"Last day of the month" has no portable five-field spelling — months end on 28, 29, 30 or 31. Either run 0 9 28-31 * * with a script guard checking tomorrow is the 1st, or use a scheduler with L syntax (Quartz).
- →Combining a restricted day-of-month with a restricted day-of-week ("first Monday") fires on EITHER match in classic cron — that one needs a script guard too.
- →Month-end billing jobs usually want the 1st looking BACK at last month, which this is; running ON the last day adds the pitfalls above for little gain.