发生未捕获的异常时重新启动Node.js应用程序

时间:2013-10-12 16:15:26

标签: javascript node.js

如果发生异常,我怎样才能重启我的应用程序?

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

3 个答案:

答案 0 :(得分:24)

您可以将该进程作为另一个进程的分支运行,因此如果它死了就可以进行分叉。您可以使用本机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 :(得分:7)

你有几个选择..

  1. 使用nodemon / forever

    等监视器重启应用程序

    process.on('uncaughtException',function(err){
        的console.log(ERR);     //发送有关错误的通知
        process.exit(1); });

    使用

    启动您的应用程序

    nodemon ./server.js

    永远server.js开始

  2. 使用cluster

  3. 重新启动

    此方法涉及一个进程集群,其中主进程在它们被杀死时重新启动任何子进程

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

答案 2 :(得分:4)

结帐nodemonforever。我使用nodemon进行开发,并永远用于生产。奇迹般有效。只需使用nodemon app.js启动您的应用。