1

i have set up Node JS server cluster environment to fully utilize all the cores of my server. There is a Cron Job which runs every day 08 O'clock to run some tasks. But due to clustering it runs 4 times(server is of 4 cores) every day at 08 O'clock. How can i over come this problem to run Cron Job only once a day?

if(cluster.isMaster) {
    var numWorkers = require('os').cpus().length;

    console.log('Master cluster setting up ' + numWorkers + ' workers...');

    for(var i = 0; i < numWorkers; i++) {
        cluster.fork();
    }

    cluster.on('exit', function(worker, code, signal) {
        console.log('Worker ' + worker.process.pid + ' died with code: ' + code + ', and signal: ' + signal);
        cluster.fork();
    });
} else {

    var CronJob = require('cron').CronJob;
    new CronJob('01 30 08 * * 0-6', function() {
      console.log('Running Schedular');
      //Performing tasks
    }, null, true, 'America/Los_Angeles');

    var server = app.listen(port, function() {
        console.log('Process ' + process.pid + ' is listening to all incoming requests');
    });
}
Abhishek Agarwal
  • 165
  • 1
  • 2
  • 13

2 Answers2

0

Hi Please find the below changes, I just changed cron job into if condition.

var CronJob = require('cron').CronJob;
if(cluster.isMaster) {
    var numWorkers = require('os').cpus().length;

    console.log('Master cluster setting up ' + numWorkers + ' workers...');

    for(var i = 0; i < numWorkers; i++) {
        cluster.fork();
    }

    cluster.on('exit', function(worker, code, signal) {
        console.log('Worker ' + worker.process.pid + ' died with code: ' + code + ', and signal: ' + signal);
        cluster.fork();
    });

    new CronJob('01 30 08 * * 0-6', function() {
      console.log('Running Schedular');
      //Performing tasks
    }, null, true, 'America/Los_Angeles');

} else {

    var server = app.listen(port, function() {
        console.log('Process ' + process.pid + ' is listening to all incoming requests');
    });
}
0

Let the master cluster handle the cron job and not one of the worker threads.

michgboxy
  • 7
  • 1
  • 8