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

19 javascript node.js

发生异常时,我如何能够重启我的应用程序?

process.on('uncaughtException', function(err) {         
  // restart app here
});
Run Code Online (Sandbox Code Playgroud)

hex*_*ide 25

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

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
}
Run Code Online (Sandbox Code Playgroud)

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


Sri*_*sha 7

你有几个选择..

  1. 使用nodemon/forever等监视器重启应用程序

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

    使用启动应用程序

    nodemon ./server.js

    永远server.js开始

  2. 使用群集重新启动

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

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么要分叉 4 次? (2认同)