2016-08-08 33 views
0

Ich habe Clustering in meiner Node.js-Anwendung durchgeführt. Ich habe einen Cron-Job-Service in meiner Anwendung, der gestartet wird, wenn ich die SRV_TYPE = cron-Umgebungsvariable an die app.js übergebe. Die Frage istEinen Prozess für CRON-Job zuweisen node.js

Ich möchte, dass nur ein Prozess meinen Cron-Job ausführen wird. Dies ist Code shared on gist github

+0

Wie wäre es, wenn Sie eine völlig separate App (sagen wir Cron), die für die Behandlung von Cron-Jobs verantwortlich sein wird. Auf diese Weise können Sie die Bedenken trennen. Wenn Sie eine Nachricht/Aufgabe von Ihrer Hauptanwendung an die Cron-App übergeben müssen, können Sie Rabbitmq für das Nachrichtensystem verwenden. – guptakvgaurav

Antwort

0

One way:

// In the master: 
for (var i = 0; i < cpuCount; i += 1) { 
    cluster.fork({ RUN_CRON : process.env.SRV_TYPE === "cron" && i === 0 }); 
} 

// In the worker: 
if (process.env.RUN_CRON === 'true') { 
    ...create the scheduler... 
} 

Mit anderen Worten: Sie eine Umgebungsvariable RUN_CRON zu jedem Arbeiter passieren, und es wird die Zeichenfolge true wenn SRV_TYPE wird auf cronund es ist enthalten der erste Arbeitsprozess, der gespalten wurde.

+0

das Problem ist immer noch da Check-out dies [Screenshot] (http://imgur.com/a/hjp0q) –

+0

Ich sehe das Problem nicht? Worker 1 protokolliert nicht die Nachricht _ "App wird gestartet am ..." _, so dass es derjenige ist, der den Cron-Teil ausführt. – robertklep

1

Es gibt viele Möglichkeiten, dies zu implementieren. Sie könnten eine separate Instanz für Cron-Jobs ausführen. Sie können Cron-Jobs nur auf Master ausführen.

Ich habe gerade ein kleines Modul für Knoten, cronivo geschrieben, es verwendet LaterJs und Redis, damit ein Cron-Job nur einmal im Cluster oder Multiprozess ausgeführt werden kann. Nur die erste verfügbare Instanz führt den Job aus. Jede der Instanzen kann den Job ausführen, jedoch nur einen.