Cron First of the Month
Month-start cron — 0 0 1 * * with live next runs, the @monthly macro and each scheduler's spelling ready to copy.
History
Valid expressions you run are kept here — on this device only.
The plain-English description appears here.
| # | UTC | UTC time | DST |
|---|---|---|---|
| Upcoming runs for a valid expression appear here. | |||
—Press ? for shortcuts
Platform variants
Classic cron
Cron expression: 0 0 1 * *
Day-of-month 1 at 00:00; @monthly expands to exactly this.
Quartz
Cron expression: 0 0 0 1 * ?
Quartz form with day-of-month 1 and ? in day-of-week.
AWS EventBridge
Cron expression: cron(0 0 1 * ? *)
Day-of-month 1 with ? in day-of-week and a * year field.
Kubernetes
Cron expression: 0 0 1 * *
CronJob also accepts the @monthly macro for this schedule.
GitHub Actions
Cron expression: 0 0 1 * *
Runs at 00:00 UTC on the 1st in on.schedule.cron.
Also covers: monthly on the 1st, @monthly
Do it offline:$ (crontab -l; echo "0 0 1 * * /path/to/job") | crontab -
How to use it
- Ship 0 0 1 * * as-is for any monthly rollover job in crontab, a CronJob or a workflow schedule.
- Anchor a different date by swapping the third field: 0 0 15 * * for mid-month, 0 0 1 1,4,7,10 * for quarters.
- Sanity-check in the tester that each previewed run is the 1st of a successive month — the gaps are never uniform.
Billing closes, invoice batches, usage resets — month-boundary work runs on 0 0 1 * *: midnight as the 1st begins. Cron's day-of-month field starts at 1, the calendar's own numbering, and @monthly expands to this exact line. The live preview walks the next five month-starts, including the roll into January.
Examples
0 0 1 * *describes At 00:00, on day 1 of the month
next 1 2026-09-01T00:00:00.000Z
next 2 2026-10-01T00:00:00.000Z
next 3 2026-11-01T00:00:00.000Z
next 4 2026-12-01T00:00:00.000Z
next 5 2027-01-01T00:00:00.000ZFive month-starts, September 2026 through January 2027 — gaps of 30 or 31 days depending on the month crossed; monthly jobs key on dates, not fixed intervals.
0 0 1 1 *describes At 00:00, on day 1 of the month, only in January
next 1 2027-01-01T00:00:00.000Z
next 2 2028-01-01T00:00:00.000Z
next 3 2029-01-01T00:00:00.000Z
next 4 2030-01-01T00:00:00.000Z
next 5 2031-01-01T00:00:00.000ZPinning the month field turns monthly into yearly: only New Year's midnight matches, and the preview leaps 2027 through 2031. @yearly names this same rule.
Every example on this page is executed against the same engine that powers the tool, on every build.
Gotchas worth knowing
Day zero does not exist
Programmers reach for 0 in the date field; cron refuses — days run 1–31, calendar numbering, not array indexing. The year-end reflex December 32nd has the same fix: write 0 0 1 1 * and let January's 1st be the boundary.
Common errors
Field 3 (day of month): '0' is outside 1–31- Zero-based habits meeting a one-based field: month-start is day 1, and the refusal anchors the digit. There is no day-zero alias for month-end either — that intent has its own explainer.
FAQ
Is @monthly identical to 0 0 1 * *?
Identical — the macro expands to it, as the tester's note confirms, and both preview the same month-starts. Prefer the explicit form where teammates read the crontab.
How do I run on the last day of the month instead?
Not in one classic line — day counts differ. The last-day explainer covers it: a 28–31 window guarded by a date check, or the L token on Quartz and EventBridge.
What time does the job run on the 1st?
Midnight — hour and minute are both zero here. To land later in the morning, edit the hour: 0 6 1 * * runs at 06:00 on the 1st.