Node.js6 min read

Scheduled Jobs with node-cron

Schedule recurring tasks with cron jobs. Automate cleanups and reports.

Michael Torres
December 19, 2025
0.0k0

Scheduled Jobs with node-cron

What are Cron Jobs?

Cron jobs run code at specific times automatically:

  • Every day at midnight
  • Every Monday at 9 AM
  • Every 5 minutes
  • First day of each month

Setup

npm install node-cron

Basic Usage

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

cron.schedule('* * * * *', () => {
  console.log('Running every minute');
});

cron.schedule('0 0 * * *', () => {
  console.log('Running daily at midnight');
  performDailyCleanup();
});

cron.schedule('0 9 * * 1', () => {
  console.log('Running every Monday at 9 AM');
  sendWeeklyReport();
});

Cron Syntax

* * * * *
│ │ │ │ │
│ │ │ │ └─ Day of week (0-7, 0 and 7 = Sunday)
│ │ │ └─── Month (1-12)
│ │ └───── Day of month (1-31)
│ └─────── Hour (0-23)
└───────── Minute (0-59)

Examples:
'0 0 * * *'      → Every day at midnight
'*/5 * * * *'    → Every 5 minutes
'0 9 * * 1-5'    → Weekdays at 9 AM
'0 0 1 * *'      → First day of month
'0 */6 * * *'    → Every 6 hours

Real Example: Delete Old Logs

cron.schedule('0 2 * * *', async () => {
  console.log('Cleaning old logs...');
  
  const thirtyDaysAgo = new Date();
  thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30);
  
  await Log.deleteMany({
    createdAt: { $lt: thirtyDaysAgo }
  });
  
  console.log('Cleanup complete');
});

Real Example: Daily Report

cron.schedule('0 8 * * *', async () => {
  const yesterday = new Date();
  yesterday.setDate(yesterday.getDate() - 1);
  
  const stats = {
    newUsers: await User.countDocuments({
      createdAt: { $gte: yesterday }
    }),
    orders: await Order.countDocuments({
      createdAt: { $gte: yesterday }
    })
  };
  
  await sendEmailReport(stats);
});

Start/Stop Jobs

const task = cron.schedule('* * * * *', () => {
  console.log('Running task');
}, {
  scheduled: false
});

task.start();

task.stop();

task.destroy();

Key Takeaway

Use cron for recurring tasks. Understand cron syntax. Handle errors in jobs. Consider timezone for global apps. Use Bull queue for complex job management.

#Node.js#Cron#Scheduling#Automation