23

发生异常时如何重新启动我的应用程序?

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

3 回答 3

37

您可以将该进程作为另一个进程的分叉运行,因此如果它死了,您可以分叉它。您将为此使用本机集群模块:

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
}

此代码生成一个工作进程,如果工作进程中抛出错误,它将关闭,退出将重新生成另一个工作进程。

于 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 回答
4

结帐nodemon永远。我将 nodemon 用于开发并永远用于生产。奇迹般有效。只需使用nodemon app.js.

于 2013-10-12T16:21:23.137 回答