Задание Cron запускается несколько раз в кластерной среде в узле js - PullRequest
0 голосов
/ 24 июня 2018

Я настроил кластерную среду сервера Node JS, чтобы полностью использовать все ядра моего сервера. Существует Cron Job, которая запускается каждый день 08:00 для выполнения некоторых задач. Но из-за кластеризации он запускается 4 раза (сервер состоит из 4 ядер) каждый день в 08:00. Как я могу решить эту проблему, чтобы запускать 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');
    });
}

Ответы [ 2 ]

0 голосов
/ 18 июля 2019

Пусть главный кластер обрабатывает задание cron, а не один из рабочих потоков.

0 голосов
/ 06 июля 2018

Привет Пожалуйста, найдите приведенные ниже изменения, я только что изменил задание cron на if 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');
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...