23

例外が発生したときにアプリを再起動するにはどうすればよいですか?

process.on('uncaughtException', function(err) {         
  // restart app here
});
4

3 に答える 3

37

プロセスを別のプロセスのフォークとして実行できるため、プロセスが停止した場合にフォークできます。これには、ネイティブのClusterモジュールを使用します。

var cluster = require('cluster');
if (cluster.isMaster) {
  cluster.fork();

  cluster.on('exit', function(worker, code, signal) {
    cluster.fork();
  });
}

if (cluster.isWorker) {
  // put your code here
}

このコードは 1 つのワーカー プロセスを生成し、ワーカー プロセスでエラーがスローされた場合は終了し、出口は別のワーカー プロセスを再生成します。

于 2013-10-12T16:24:39.687 に答える
7

いくつかのオプションがあります..

  1. nodemon/forever などのモニターを使用してアプリケーションを再起動します。
process.on('uncaughtException', function (err) {       
    console.log(err);
    //Send some notification about the error  
    process.exit(1);
});

を使用してアプリケーションを起動します

nodemon ./server.js 
forever server.js start
  1. クラスタを使用して再起動する

この方法には、プロセスのクラスターが含まれます。マスター プロセスは、子プロセスが強制終了された場合に再起動します。

var cluster = require('cluster');
if (cluster.isMaster) {
   var i = 0;
   for (i; i< 4; i++){
     cluster.fork();
   }
   //if the worker dies, restart it.
   cluster.on('exit', function(worker){
      console.log('Worker ' + worker.id + ' died..');
      cluster.fork();
   });
}
else{
   var express = require('express');
   var app = express();

   .
   .
   app.use(app.router);
   app.listen(8000);

   process.on('uncaughtException', function(){
      console.log(err);
      //Send some notification about the error  
      process.exit(1);
  }
}
于 2013-10-12T16:36:07.960 に答える