【问题标题】:Restart Node.js application when uncaught exception occurs发生未捕获的异常时重新启动 Node.js 应用程序
【发布时间】:2013-10-20 14:43:46
【问题描述】:

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

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

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 太棒了。谢谢!像魅力一样工作:)
      【解决方案3】:

      你有几个选择..

      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. 使用cluster重新启动

      这种方法涉及一个进程集群,如果主进程杀死了任何子进程,则主进程会重新启动它们

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

      【讨论】:

      • 请参考@hexacyanide
      • 你为什么要分叉4次?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 1970-01-01
      相关资源
      最近更新 更多