Cron on the first day of the month

0 0 1 * *

0 0 1 * * runs a job at midnight on the 1st of every month. The third field is the day of month, so 1 picks the first. @monthly is the same schedule in most crons.

When it fires

Checked on October 14, 2026, the next five runs are:

Nov 1  Dec 1  Jan 1  Feb 1  Mar 1    (all at 00:00)

To run later in the day, change the first two fields: 30 6 1 * * runs at 06:30 on the 1st.

The last day of the month

Standard cron has no field for it, because months have 28 to 31 days. The usual workaround runs on every possible last day and checks whether tomorrow is the 1st:

0 23 28-31 * * [ "$(date -d tomorrow +\%d)" = 01 ] && /usr/local/bin/close-month.sh

Quartz and AWS write it as L in the day-of-month field.

The same schedule elsewhere

  • GitHub Actions: cron: '0 0 1 * *', at midnight UTC.
  • Kubernetes CronJob: schedule: "0 0 1 * *", or "@monthly".
  • AWS EventBridge: cron(0 0 1 * ? *); the last day is cron(0 0 L * ? *).
  • systemd timer: OnCalendar=monthly, or *-*-01 00:00:00.
  • Spring @Scheduled: 0 0 0 1 * *; the last day is 0 0 0 L * *.

Try it in the Cron Builder

At 00:00, on day 1 of the month

Read as a crontab line, where Sunday is 0 or 7.

minutehourday of monthmonthday of week
001**

Next runs

Working out the next runs from your clock…

Runs in your browser. Nothing you enter is sent anywhere.