2016-08-08 9 views
0

Node.jsアプリケーションでクラスタリングを実行しました。私はapp.jsにSRV_TYPE = cron環境変数を渡すと起動される私のアプリケーションにcronジョブサービスを持っています質問はCRONジョブ用の1つのプロセスを割り当てます。node.js

私のcronジョブを実行するプロセスは1つだけです。 これはコードshared on gist github

+0

Cronジョブの処理を担当する完全に別個のアプリケーション(cronと言うことができます)を実行するとどうでしょうか。このようにして、懸念を分けることができます。メインアプリからcronアプリにメッセージ/タスクを渡す必要がある場合は、メッセージングシステムにRabbitmqを使用できます。 – guptakvgaurav

答えて

0

一つの方法である:つまり

// 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... 
} 

:あなたは、各労働者に環境変数RUN_CRONを渡し、SRV_TYPEcronに設定し、それはですされている場合、それは文字列trueが含まれていますフォークされた最初のワーカープロセス。

+0

問題はまだチェックアウトされています[screenshot](http://imgur.com/a/hjp0q) –

+0

私は問題が表示されません?ワーカー1は、「App Starting ... on」_メッセージをログに記録していないので、cronパートを実行しているものになります。 – robertklep

1

これを実装する方法はたくさんあります。 cronジョブ用に別のインスタンスを実行できます。マスターでのみcronジョブを実行できます。

ノード用の小さなモジュールcronivoを書きましたが、laterJsとredisを使用して、クラスタまたはマルチプロセスでも1回だけcronジョブを実行できるようにしました。最初に使用可能なインスタンスのみがジョブを実行します。インスタンスのどれでもジョブを実行できますが、ジョブは1つのみです。

関連する問題