Open In App

How to run Cron Jobs in Node.js ?

Cron Jobs: These are the tasks that run periodically by the operating system. Users can schedule commands the OS will run these commands automatically according to the given time. It is usually used for system admin jobs such as backups, logging, sending newsletters, subscription emails and more.

Prerequisites:



We will use a package called node-cron which is a task scheduler in pure JavaScript for node.js. We are also using express as a server. Install the required packages using the command

npm install express node-cron

Syntax:



cron.schedule("* * * * *", function() {
    // Task to do
});

Time formatting for Cron jobs:

Descriptors with their ranges:

Examples:

Example: Create a new file named index.js and add the following code:




// Importing required libraries
const cron = require("node-cron");
const express = require("express");
  
app = express(); // Initializing app
  
// Creating a cron job which runs on every 10 second
cron.schedule("*/10 * * * * *", function() {
    console.log("running a task every 10 second");
});
  
app.listen(3000);

Run the file using command node index, you will see the output like below:

Writing to a log file: Cron jobs can be used to schedule logging tasks in a system. We can log server status for a given time for monitoring purposes.

Example:




// Importing required packages
const cron = require("node-cron");
const express = require("express");
const fs = require("fs");
  
app = express();
  
// Setting a cron job
cron.schedule("*/10 * * * * *", function() {
  
    // Data to write on file
    let data = `${new Date().toUTCString()} 
                : Server is working\n`;
      
    // Appending data to logs.txt file
    fs.appendFile("logs.txt", data, function(err) {
          
        if (err) throw err;
          
        console.log("Status Logged!");
    });
});
  
app.listen(3000);

After running above file for 30-40 seconds, you will see a file created named logs.txt having content somewhat similar to the following:

Monthly Newsletters: Sending monthly newsletters are also a use case for cron jobs in which an email will be sent to the users monthly with the latest products or blog information on the website.

You can learn more about sending email in Node.js here.

Example:




// Importing packages
const cron = require("node-cron");
const express = require("express");
const nodemailer = require("nodemailer");
  
app = express();
  
// Calling sendEmail() function every 1 minute
cron.schedule("*/1 * * * *", function() {
sendMail();
});
  
// Send Mail function using Nodemailer
function sendMail() {
    let mailTransporter = nodemailer.createTransport({
        service: "gmail",
        auth: {
        user: "<your-email>@gmail.com",
        pass: "**********"
        }
    });
      
    // Setting credentials
    let mailDetails = {
        from: "<your-email>@gmail.com",
        to: "<user-email>@gmail.com",
        subject: "Test mail using Cron job",
        text: "Node.js cron job email"
           + " testing for GeeksforGeeks"
    };
      
      
    // Sending Email
    mailTransporter.sendMail(mailDetails, 
                    function(err, data) {
        if (err) {
            console.log("Error Occurs", err);
        } else {
            console.log("Email sent successfully");
        }
    });
}
  
app.listen(3000);

The above script will send emails every minute.

Note: Open this link to Allow less secure apps: ON.

Now run the file using node index.js, you will see the output like below:

In console:

In Gmail Inbox:


Article Tags :