Cron pattern
Cron Expression for the First Day of Each Month
0 0 1 * * is the monthly schedule that runs at midnight on the 1st of every month. The third field is the star of the show — here is how it works.
0 0 1 * * This schedule fires on the pattern shown above; see the field-by-field breakdown below.
Next 5 run times
Computed in your browser, in your local timezone.
- your local time
- your local time
- your local time
- your local time
- your local time
Reading 0 0 1 * *
The five cron fields are minute, hour, day of month, month, day of week. In
0 0 1 * *:
0— at minute zero.0— at midnight (hour zero).1— on day 1 of the month.- First
*— every month. - Second
*— every day of the week (ignored when day-of-month is set).
The day-of-month field accepts 1–31. Putting 1 there pins the job to the first
calendar day of every month — January 1, February 1, March 1 and so on — always at 12:00 AM in the
system's local timezone. Cron simply skips nonexistent days (there is no February 30), so an expression
like 0 0 31 * * would fire only in months that have 31 days.
Where monthly jobs show up
The first of the month is the default boundary for billing and reporting: invoice generation, subscription
renewals, statement runs, tax reconciliation and monthly KPI rollups all slot naturally into
0 0 1 * *. It is also the idiomatic schedule for customer lifecycle jobs — resetting
monthly usage counters, expiring unused seats, and closing the books on the previous period.
The dom/dow OR quirk
A subtlety worth knowing: if you also set the day-of-week field, most cron daemons treat the two date
fields with OR semantics — the job runs when either matches. In
0 0 1 * * the day-of-week field is *, so the job runs purely on the 1st.
The moment you write something like 0 0 1 * 1, most daemons would fire on the 1st
and on every Monday, which is rarely intended.
For other recurring boundaries, compare the daily reset
0 0 * * *, the
weekly Monday schedule, and the range syntax used by
weekdays-only. A full field-by-field reference, including month names
like JAN–DEC, lives in the complete cron guide.
Understanding the syntax of 0 0 1 * *
In plain English, this schedule at 12:00 am, on day 1 of the month. Here is each of the five fields and what it controls:
| Field | Value | Meaning |
|---|---|---|
| Minute | 0 | at minute 0 |
| Hour | 0 | at 12:00 AM |
| Day of month | 1 | on day 1 of the month |
| Month | * | every month |
| Day of week | * | every day of the week |
The expression has five space-separated fields: minute hour day-of-month month day-of-week. Any field set to * means “every”.
Explore more cron patterns
Fine-tune your schedule with a related pattern, or start from scratch in the builder.