Run Jobs Monthly at Noon on Day One | CronBase

cron expression Standard
$ 0 12 1 * *

At twelve o'clock noon on the first day of every month.

The `0 12 1 * *` cron expression schedules a task to execute precisely at 12:00 PM (noon) on the first day of every calendar month. This highly predictable monthly cadence is commonly utilized for generating billing statements, compiling monthly reports, resetting usage quotas, and initiating deep-archive data backups.

Minute
0
Hour
12
Day of Month
1
Month
*
Day of Week
*

Next 5 Runs

  • in 20d 1h
  • in 51d 1h
  • in 81d 1h
  • in 112d 1h
  • in 143d 1h

* Tools

Code & Implementations

nodejs
const cron = require('node-cron');

// Schedule task to run at 12:00 PM on the first day of every month
cron.schedule('0 12 1 * *', () => {
  try {
    console.log('Starting monthly invoice generation process...');
    // Implement production business logic here
  } catch (error) {
    console.error('Failed to execute monthly cron job:', error);
  }
}, {
  scheduled: true,
  timezone: "UTC"
});
Setup notes

Install node-cron via 'npm install node-cron'. We explicitly configure the timezone as UTC to avoid unexpected execution shifts during daylight saving changes.

Partner BetterStack

Monitor this schedule in production

Get alerted the moment this cron job fails, is late, or doesn't run. BetterStack tracks execution, duration, and output — no infrastructure required.

Platform Equivalents

AWS EventBridge

Standard cron expressions often need conversion for AWS EventBridge schedules.

EventBridge Rule
cron(0 12 1 * ? *)

Systemd Timer

OnCalendar*-*-01 12:00:00

my-task.timer
[Unit]
Description=Timer for cron expression: 0 12 1 * *

[Timer]
OnCalendar=*-*-01 12:00:00
Persistent=true

[Install]
WantedBy=timers.target

Frequently Asked Questions

What happens if the server is offline at exactly 12:00 PM on the first?

Standard cron daemons do not catch up on missed executions. If your server is offline during the execution window, the job will not run until the first of the following month. For critical tasks, use tools like Anacron, or design your job to check for missing historical runs upon startup.

How does Daylight Saving Time (DST) affect a job running at noon?

Scheduling jobs at 12:00 PM is highly resilient to DST shifts, as transitions almost exclusively occur during early morning hours (typically 1:00 AM to 3:00 AM). However, if your system is configured to run on UTC but your business operates on local time, the local execution hour will shift by one hour twice a year.

How should I handle long-running processes that take hours to complete?

Since this job runs only once a month, overlapping executions are rare. However, if the process is extremely heavy, ensure you configure concurrency limits (e.g., concurrencyPolicy: Forbid in Kubernetes) and set an explicit application-level timeout to prevent orphaned database connections or memory leaks.

Can I run this schedule on the last day of the month instead of the first?

Standard cron does not natively support an 'L' (Last) character to target the last day of the month. To run on the last day, you must either schedule the job to run daily and use an inline shell script check (e.g., checking if tomorrow is the first), or use advanced cron dialects like Quartz.

How do I test a monthly cron job without waiting an entire month?

Do not wait for the real schedule. You can test the job by temporarily modifying the cron pattern to run every few minutes in a staging environment. Alternatively, decouple your business logic into a separate script or CLI command that can be triggered manually on-demand during verification.

* Explore

Related expressions you might need

Was this helpful?

Last verified: