Run a Cron Job on the First Day of Every Month
To run a job on the first day of each month, use 0 0 1 * * — it fires at midnight on the 1st. The 1 in the day-of-month field is what makes it monthly.
The expression
0 0 1 * * runs at 00:00 on day 1 of every month. Fields are minute(0) hour(0) day-of-month(1) month(*) day-of-week(*).
Change the time
For 6:30 AM on the 1st use 30 6 1 * *. For 9 PM use 0 21 1 * *.
Common mistake
Leaving the day as * (0 0 * * *) runs every day, not just the 1st. The day-of-month value is required for a monthly schedule.
Shortcut
The alias @monthly is identical to 0 0 1 * * on most cron implementations.
FAQ
What is the cron expression for the first day of the month?
0 0 1 * * runs at midnight on the 1st of every month. Change the first two fields to set a different time.
Is @monthly the same?
Yes. @monthly expands to 0 0 1 * * on Vixie cron, systemd and most schedulers.
How do I run at a specific time on the 1st?
Set minute and hour, e.g. 30 6 1 * * for 6:30 AM on the first of each month.