Setting up Cron Jobs using node-cron in Node.js

Mateen Kiani

Mateen Kiani

Published on Sat Mar 02 2024·3 min read

scheduling cronjob

Automating tasks is a fundamental aspect of software development, and in the realm of Node.js, cron jobs provide a powerful way to schedule recurring tasks. Cron jobs allow developers to execute specific functions or scripts at predefined intervals. In this article, we'll explore how to set up cron jobs in Node.js using the node-cron library.

What is node-cron?

node-cron is a popular npm package that provides a simple and flexible API for scheduling tasks in Node.js using the cron syntax. It allows you to define cron jobs in your Node.js applications to execute functions or scripts at regular intervals.

Prerequisites

Before we dive into implementing cron jobs with node-cron, ensure you have the following installed:

  • Node.js installed on your machine.
  • A Node.js project set up with npm or yarn initialized.

Installing node-cron

To get started, navigate to your project directory in the terminal and install node-cron using npm or yarn:

npm install node-cron

or

yarn add node-cron

Creating a Basic Cron Job

Let's start by creating a basic cron job that logs a message to the console every minute. Create a new file (e.g., cronjob.js) and add the following code:

const cron = require('node-cron');
cron.schedule('* * * * *', () => {
console.log('Cron job is running every minute...');
});

In the code above:

  • We import the node-cron package.
  • We use the cron.schedule method to define our cron job. The first argument is the cron expression, which specifies when the job should run. In this case, * * * * * means every minute.
  • The second argument is a callback function that contains the task to be executed.

Save the file and run it using Node.js:

node cronjob.js

You should see the message "Cron job is running every minute..." being logged to the console every minute.

cronjob output

Using Cron Expressions

The cron expression consists of five fields:

* * * * *
│ │ │ │ │
│ │ │ │ └───── Day of week (0 - 7) (Sunday to Saturday; 7 is also Sunday on some systems)
│ │ │ └────────── Month (1 - 12)
│ │ └─────────────── Day of month (1 - 31)
│ └──────────────────── Hour (0 - 23)
└───────────────────────── Minute (0 - 59)

You can customize the cron expression to suit your scheduling needs. For example:

  • * * * * * Run every minute.
  • 0 * * * * Run every hour at the beginning of the hour.
  • */5 * * * * Run every 5 minutes.
  • 0 0 * * * Run every day at midnight.

For example, to run a job every day at 3:30 AM, the cron expression would be '30 3 * * *'.

Here's an example of a cron job that runs at 12 PM (noon) every Sunday:

cron.schedule('0 12 * * 0', () => {
console.log('It\'s Sunday at 12 PM!');
});

Handling Timezones

By default, node-cron uses the server's timezone. If you need to specify a different timezone, you can do so when creating a cron job:

cron.schedule('0 9 * * *', () => {
console.log('Good morning New York!');
}, {
timezone: 'America/New_York'
});

Error Handling

It's important to handle errors that may occur within your cron jobs. You can use a try-catch block or handle errors within the callback function:

cron.schedule('*/5 * * * *', () => {
try {
// Your code here
} catch (error) {
console.error('An error occurred:', error.message);
}
});

Conclusion

In this article, you learned how to set up cron jobs using the node-cron package in Node.js. Cron jobs are useful for automating repetitive tasks such as sending email reminders, generating reports, or performing database maintenance. With node-cron, you have a powerful tool at your disposal for scheduling these tasks efficiently and reliably. Experiment with different cron expressions to create schedules that meet your application's requirements.


Mateen Kiani
Mateen Kiani
kiani.mateen012@gmail.com
I am a passionate Full stack developer with around 3 years of experience in MERN stack development and 1 year experience in blockchain application development. I have completed several projects in MERN stack, Nextjs and blockchain, including some NFT marketplaces. I have vast experience in Node js, Express, React and Redux.