2017-12-22 5 views
0

Das Problem, das mir gegenübersteht, ist, dass das Projekt bereits mit cluster programmiert wurde, um die Aufgabe zu verteilen.Nodejs-Cluster Aufgabe nur einem Arbeiter zuweisen (Beliebig)

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); 
    } 

Ich habe eine Grundidee, dass dieser Code Aufgabe unter cpu für die Verteilung und Server im Falle einer CPU nicht leben zu halten.

Die Frage ist: Alles funktionierte gut, bis ich begann müssen mit Knoten arbeiten, um die cron Job zu planen (die E-Mail sein wird). Der Cron wird jetzt von allen Mitarbeitern gleichzeitig ausgeführt und die E-Mail wird an den Worker gesendet, je nachdem wie viele CPUs auf dem Server vorhanden sind. Die I Arbeiter durch Terminierung von Job meiner Art und Weise, wie:

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

Das funktionierte sehr fein im lokalen System aber nicht wegen des zu diesem Projekt ausgerichtet Server vielleicht CPU in Staging.

Gibt es eine Möglichkeit nur den ersten freien Arbeiter zu bekommen und Aufgabe, ihn zu zuweisen. Jetzt

Ich habe versucht, diese

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

Antwort

0

Sie können sich die cron in Master-Prozess planen. Cron muss auf eine idempotente Weise gehandhabt werden.

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

    // continue initializing workers here 
} 
+0

danke für die Antwort. Ich habe tatsächlich etwas Besseres herausgefunden. Um den Cron-Job getrennt mit 'Crontab' zu machen. Aber deine Antwort ist richtig. :) – Sandeep

0

Ich tat das mit der crontab. Erstellen Sie eine separate Cron-Datei und planen Sie den Job mit der Befehlszeile crontab, um den Job zu planen. Danke für die Unterstützung.

Verwandte Themen