私が直面している問題は、プロジェクトがすでにcluster
でタスクを配布するようにプログラムされていることです。Nodejsクラスタは1人のワーカーにタスクを割り当てます(Any)
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数に応じて電子メールがワーカーに送信されます。 Iワーカーアウトスケジューリングジョブによって私の方法:
if(cluster.isWorker)
if(cluster.worker.id == 1){
cron.schedule('*/1 * * * *', function() {
//CRON JOB
})
}
これは、ローカルシステム内で非常にうまくいきましたが、おそらくこのために非常にプロジェクトに並ぶCPUのステージングサーバーに失敗しました。
最初のフリーワーカーのみを取得し、タスクを に割り当てる方法はありますか。
今、私はあなたがマスター・プロセス自体にcron
をスケジュールすることができ、この
var wokerArr = []
wokerArr.push(cluster.worker.id)
if(cluster.worker.id == wokerArr[0])
cron.schedule('*/1 * * * *', function() {
//CRON JOB
})
お返事ありがとうございます。私は実際にはもっと適切な何かを考え出しました。 'crontab'を使ってcronジョブを別に行う。しかし、あなたの答えは正しいです。 :) – Sandeep