First Day of Month
0 0 1 * * 0 0 0 1 * ? 0 0 1 * * 0 0 1 * ? * 0 0 0 1 * * 0 0 1 * * Runs at 00:00 on the 1st of every month — 12 invocations per year.
Use in your stack
# First day of every month at midnight
0 0 1 * * /usr/local/bin/monthly-billing.sh
# Equivalent shortcut (Linux crontab)
@monthly /usr/local/bin/monthly-billing.sh
{ "cron": "0 0 0 1 * ?", "timezone": "UTC" }
apiVersion: batch/v1
kind: CronJob
metadata:
name: monthly-billing
spec:
schedule: "0 0 1 * *"
timeZone: "UTC"
jobTemplate:
spec:
template:
spec:
containers:
- name: billing
image: my-image:latest
restartPolicy: OnFailure
cron(0 0 1 * ? *)
@Scheduled(cron = "0 0 0 1 * *")
public void monthlyJob() { /* ... */ }
on:
schedule:
- cron: '0 0 1 * *'
Next runs
Pick a timezone to see when this expression fires next.
Next 10 runs
- 012026-08-01T00:00:00.000Z
- 022026-09-01T00:00:00.000Z
- 032026-10-01T00:00:00.000Z
- 042026-11-01T00:00:00.000Z
- 052026-12-01T00:00:00.000Z
- 062027-01-01T00:00:00.000Z
- 072027-02-01T00:00:00.000Z
- 082027-03-01T00:00:00.000Z
- 092027-04-01T00:00:00.000Z
- 102027-05-01T00:00:00.000Z
Variations
Common use cases
- Monthly billing runs or invoice generation.
- Calendar-month reports (usage, revenue, KPIs).
- Rotating monthly credentials or secrets.
- Archiving the previous month's data and starting a fresh window.
Gotchas
- On Linux crontab, `@monthly` is shorthand for `0 0 1 * *`. Kubernetes CronJob accepts it; GitHub Actions does not.
- AWS EventBridge: `0 0 1 * ? *` — uses `?` for day-of-week.
- Months have different numbers of days, but the 1st always exists — this is one of the safer date-anchored schedules.
- If you want the last day of the month instead, see the [last-day-of-month pattern](/last-day-of-month) — Unix cron can't express it directly.
0 0 1 * * is the monthly cron. The 1st of the month is one of the safest date anchors — it exists in every month, in every year, in every timezone. For end-of-month scheduling, see last-day-of-month — that’s where it gets tricky.
Frequently asked questions
What does `0 0 1 * *` mean?
Minute `0`, hour `0` (midnight), day-of-month `1`, month `*` (any), day-of-week `*` (any). So the job fires at midnight on the 1st day of every month — 12 invocations per year.
Is `0 0 1 * *` the same as `@monthly`?
Yes, on systems that support the shortcut. Linux crontab, anacron, and Kubernetes CronJob all accept `@monthly`. GitHub Actions does not — use the full expression.
What's the Quartz equivalent?
`0 0 0 1 * ?` — six fields (seconds at front), with `?` in day-of-week because day-of-month is set. Quartz requires `?` in one of the two day fields to break ambiguity.
Will this work if my timezone has a DST transition on the 1st?
Yes — the 1st of the month always exists, regardless of DST. The job fires at the configured midnight in the timezone you've pinned. If your timezone has a DST transition late on the 1st, the timing is correct because the transition typically happens at 2 AM or 3 AM.
Browse all cron patterns
Every schedule Cronuru documents, with its expression and code snippets for six dialects.