Cron on the first day of every month
The first day of the month in cron is 0 0 1 * * or @monthly (Unix), 0 0 0 1 * ? in Quartz and Spring; next runs are calculated in your browser.
0 0 1 * *
0 0 0 1 * ?
cron(0 0 1 * ? *)
Read by our parser as: At 12:00 AM (midnight), on the 1st of the month. Open in the cron checker
Next 10 runs
Calculating in your browser...
- 1
- 2
- 3
At a glance
- Accepts
- Nothing to enter - the schedule is preset on the page
- Outputs
- The expression in Unix, Quartz/Spring and AWS form, plus its next 10 run times
- Where it runs
- Entirely in your browser, on your device
- What leaves your device
- Nothing - what you type stays in this tab
- Limits
- Run times use your browser's timezone or UTC; real schedulers can start a run late
- Account
- Not required - there is no sign-up
- Price
- Free, with no watermark and no usage cap
- Made by
- Visrut
What it means
0 0 1 * * runs at 00:00 on day 1 of every month, the same as @monthly. It's the safe way to do anything monthly, because every month has a 1st (unlike the 29th, 30th or 31st).
When this is the right schedule
Use it when you're closing out the previous month: invoices, usage resets, monthly reports. Remember the job runs at the start of the new month, so it should look back.
When to pick something else
Look elsewhere when the 1st falling on a weekend is a problem (no one there to check the report). Quartz, Spring and AWS have 1W, the first weekday of the month.
Things to watch
First weekday of the month
0 0 9 1W * ? in Quartz or Spring runs at 9:00 on the weekday nearest the 1st, which is never in the previous month: if the 1st is a Saturday, it moves forward to Monday the 3rd. Unix cron has no W.
Don't add a day of week
0 0 1 * 1 in Unix cron doesn't mean "the 1st, if it's a Monday"; it means the 1st and also every Monday, because both day fields are set and cron treats that as OR.
Timezones and "the 1st"
At 00:00 UTC on the 1st it's still the last day of the previous month in the Americas. If the date matters to users in one region, set the schedule's timezone to theirs.
Frequently asked questions
What does 0 0 1 * * mean?
At midnight on the 1st day of every month.
Is @monthly the same as 0 0 1 * *?
Yes in crontab(5) and Kubernetes; in Spring it's 0 0 0 1 * *. GitHub Actions doesn't support @monthly.