Curated cron expression

First Day of Every Month Cron Expression: 0 0 1 * *

Learn the 0 0 1 * * monthly cron expression with field meaning, next-run dates, timezone and billing-boundary guidance, production gotchas, and platform conversions.

Meaning at a glance

0 0 1 * *

Run at midnight on the first day of each month

At 00:00 on January 1, February 1, March 1, and every other first day.

Next-run example: After April 1 at 00:01, the next nominal run is May 1 at 00:00.

How 0 0 1 * * works

The day-of-month value 1 restricts this schedule to the first calendar date, while minute and hour zero select midnight. It runs twelve times in a normal year.

Monthly billing and retention work often uses this expression, but a scheduled start is not a transaction boundary. Calculate the target month explicitly and make reruns safe.

Field breakdown for 0 0 1 * *
FieldValueMeaning
Minute0At minute zero
Hour0At midnight
Day of month1First calendar day
Month*Every month
Day of week*Regardless of weekday

Good use cases

  • Monthly invoices
  • Usage period rollover
  • Retention cleanup
  • Monthly reporting snapshot

Timezone and daylight-saving behavior

Use the same business timezone that defines the month in your database and customer contracts.

Month boundaries are calendar-based; the elapsed duration between runs varies with month length and can also vary by an hour across DST changes.

The expression does not contain a timezone. The scheduler supplies that context. Use the next-run preview above in the same IANA timezone as production, then confirm the target platform's own timezone rules.

Platform compatibility and converted expressions

The source expression is five-field Unix cron. Use the exact equivalent below rather than adding or removing fields by sight.

Platform compatibility for 0 0 1 * *
PlatformStatusExpressionWhat to know
Unix crontabReady0 0 1 * *Use directly in a normal five-field user crontab.
Kubernetes CronJobReady0 0 1 * *Use as spec.schedule; set spec.timeZone when local wall-clock behavior matters.
GitHub ActionsReady0 0 1 * *Use under on.schedule; UTC is the default and an IANA timezone may be specified.
Vercel Cron JobsReady0 0 1 * *Valid once-per-month schedule on all current plans, evaluated at 00:00 UTC.
AWS EventBridge SchedulerConvertcron(0 0 1 * ? *)Convert to AWS minute-first cron(...), add the required year, and use ? in one day field.
Spring @ScheduledConvert0 0 0 1 * *Use Spring’s six fields by prepending seconds and set zone explicitly when needed.
systemd timerConvertmonthlyUse OnCalendar syntax and validate it with systemd-analyze calendar on the target host.

Edge cases to check before deployment

  • Do not model “every 30 days” with a monthly calendar expression; they are different schedules.
  • A missed first-of-month run needs an explicit reconciliation path.
  • Store the processed year-month so retries cannot create duplicate invoices.

Frequently asked questions

What does the cron expression 0 0 1 * * mean?

0 0 1 * * means “run at midnight on the first day of each month.” At 00:00 on January 1, February 1, March 1, and every other first day.

What are the next run times for 0 0 1 * *?

After April 1 at 00:01, the next nominal run is May 1 at 00:00. Exact timestamps depend on the scheduler timezone and the current time.

What timezone does 0 0 1 * * use?

Use the same business timezone that defines the month in your database and customer contracts.

Can I use 0 0 1 * * on every scheduling platform?

No. It is a five-field Unix expression. Some platforms accept it directly, while AWS EventBridge Scheduler, Spring, and systemd require the converted form shown in the compatibility table.