1

我已经建立了 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');
    });
}
4

2 回答 2

0

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

于 2019-07-18T10:02:38.783 回答
0

嗨,请找到以下更改,我只是将 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');
    });
}
于 2018-07-06T08:00:22.643 回答