1

我面临的问题是该项目已经编程cluster用于分发任务。

if (cluster.isMaster) {
  // Fork workers.
  for (var i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
  cluster.on('exit', (worker, code, signal) => {
  });
} else {
var server = http.createServer(app);
var usernames = {};
var showusernames = {};
var usersmessages = [];
require('../server/controllers/communication/chat.js').chatConfig(io, usernames);
    /**
     * Listen on provided port, on all network interfaces.
     */
    server.listen(port);
    server.on('error', onError);
    server.on('listening', onListening);
    }

我有一个基本想法,即这段代码用于在 cpu 之间分配任务并保持服务器运行,以防一个 cpu 出现故障。

问题是: 一切正常,直到我需要开始使用节点来安排cron工作(将发送电子邮件)。cron 现在由所有工作人员同时运行,并且根据服务器上有多少 cpu 将电子邮件发送给工作人员。我通过将工作安排为:

 if(cluster.isWorker)
 if(cluster.worker.id == 1){
   cron.schedule('*/1 * * * *', function() {
     //CRON JOB
 })
 } 

这在本地系统中工作得很好,但在登台服务器中失败可能是因为 CPU 与这个项目对齐。

有没有办法只获得第一个免费工人并将任务分配给他。

现在我试过了

var wokerArr = []
wokerArr.push(cluster.worker.id)
if(cluster.worker.id == wokerArr[0])
cron.schedule('*/1 * * * *', function() {
    //CRON JOB
})
4

2 回答 2

0

您可以安排cronin master 进程本身。Cron 需要以幂等的方式处理。

if (cluster.isMaster) {
  cron.schedule('*/1 * * * *', function() {
     //CRON JOB
  })

  // continue initializing workers here
}
于 2017-12-22T06:52:45.873 回答
0

我使用crontab. 制作一个单独的 cron 文件并crontab在命令提示符下使用来安排作业来安排作业。感谢您的支持。

于 2017-12-22T09:12:53.460 回答