【问题标题】:Cron Job running multiple times under cluster environment in Node jsNode js集群环境下多次运行Cron Job
【发布时间】:2018-12-03 02:35:50
【问题描述】:

我已经设置了 Node JS 服务器集群环境来充分利用我服务器的所有核心。有一个 Cron Job 每天 08 点运行以运行一些任务。但由于集群,它每天 08 点运行 4 次(服务器为 4 核)。 我怎样才能解决这个问题,每天只运行一次 Cron Job?

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');
    });
}

【问题讨论】:

    标签: node.js npm cron node-cluster


    【解决方案1】:

    您好,请查看以下更改,我只是将 cron 作业更改为 if 条件。

    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');
        });
    }
    

    【讨论】:

      【解决方案2】:

      让主集群处理 cron 作业,而不是工作线程之一。

      【讨论】:

        猜你喜欢
        • 2022-06-21
        • 2019-02-28
        • 1970-01-01
        • 2020-06-23
        • 1970-01-01
        • 2018-09-19
        • 2017-11-16
        • 2015-08-29
        • 2022-01-22
        相关资源
        最近更新 更多