我面临的问题是该项目已经使用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失败。
问题是:
一切正常,直到我需要开始使用node来安排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
})
答案 0 :(得分:0)
您可以在主进程本身中安排constructor(props)
{
super(props);
this.printFile = this.printFile.bind(this);
this.testMethod = this.testMethod.bind(this);
}
。 Cron需要以幂等的方式处理。
cron
答案 1 :(得分:0)
我使用crontab
做到了。
创建单独的cron文件并使用命令提示符中的crontab
计划作业以计划作业。感谢您的支持。