2017-12-22 8 views
0

私が直面している問題は、プロジェクトがすでに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 
}) 

答えて

0

を試してみました。 Cronは、等価な方法で処理する必要があります。

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

    // continue initializing workers here 
} 
+0

お返事ありがとうございます。私は実際にはもっと適切な何かを考え出しました。 'crontab'を使ってcronジョブを別に行う。しかし、あなたの答えは正しいです。 :) – Sandeep

0

これはcrontabを使用して行いました。 別のcronファイルを作成し、ジョブをスケジュールするコマンドプロンプトでcrontabを使用してジョブをスケジュールします。サポートありがとう。

関連する問題