Monthly
0 0 1 * *Run on the 1st of every month at 00:00.
This preview is live: the table below shows the actual next run times for 0 0 1 * * in your time zone, recomputed in your browser. Change the expression, dialect, or zone to experiment, then copy the result.
0 0 1 * * means0 0 1 * * is the canonical monthly job — midnight on the 1st of every month, the value @monthly expands to. The 1 in the day-of-month field is what makes it monthly; the month and day-of-week fields stay wildcard.
First-of-month jobs handle the calendar rollover: generating last month's reports, resetting monthly quotas and budgets, issuing recurring invoices, and archiving the previous month's data. It is the heartbeat of most billing and reporting systems.
Unix cron has five fields. Here is what each one is doing in this expression:
| Field | Value | Meaning |
|---|---|---|
| Minute | 0 | minute = 0 |
| Hour | 0 | hour = 0 |
| Day of month | 1 | day-of-month = 1 |
| Month | * | every month |
| Day of week | * | every day-of-week |
The same cadence written for the seven cron dialects you are most likely to meet. Copy the line for the system you target — the field count and day-of-week numbering differ between them.
| Scheduler | Expression | Copy |
|---|---|---|
| Unix / crontab | 0 0 1 * * | |
| GitHub Actions | 0 0 1 * * | |
| Kubernetes CronJob | 0 0 1 * * | |
| Vercel Cron | 0 0 1 * * | |
| Quartz | 0 0 0 1 * ? * | |
| Spring | 0 0 0 1 * ? | |
| AWS EventBridge | 0 0 1 * ? * |
Dialect note: @monthly = 0 0 1 * * on Unix/Vercel. EventBridge requires ? in day-of-week: 0 0 1 * ? *.
0 0 1 * *Day-of-month and day-of-week interact: if you set both (e.g. 0 0 1 * 1), most cron implementations fire when EITHER matches, not both — so that would run on the 1st AND every Monday. Keep one of them wildcard.
0 0 1 * * means: Run on the 1st of every month at 00:00. 0 0 1 * * is the canonical monthly job — midnight on the 1st of every month, the value @monthly expands to. The 1 in the day-of-month field is what makes it monthly; the month and day-of-week fields stay wildcard.
Use 0 0 1 * * in the schedule's cron field. Day-of-month and day-of-week interact: if you set both (e.g. 0 0 1 * 1), most cron implementations fire when EITHER matches, not both — so that would run on the 1st AND every Monday. Keep one of them wildcard.
EventBridge uses six fields with a required year and a ? placeholder in one day field: 0 0 1 * ? *. Wrap it as cron(0 0 1 * ? *) in the console or CloudFormation.
Quartz is seconds-first with a trailing year, so the equivalent is 0 0 0 1 * ? *. Remember Quartz numbers Sunday as 1, the opposite of Unix.
Browse the full set of cron pattern pages, or jump to the interactive tools: the cron expression builder for designing a schedule from scratch, the cron cheat sheet for a side-by-side reference, the cron timezone translator for moving a schedule between zones and dialects, and the GitHub Actions cron picker for DST-stable CI schedules.