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

Restart Node.js application when uncaught exception occurs

本文关键字:重新启动 Node js 应用程序 异常      更新时间:2023-09-26

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

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

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

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. 使用像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);
  });
}

结帐节点和永远。我使用 nodemon 进行开发,永远用于生产。就像一个魅力。只需使用 nodemon app.js 启动您的应用程序即可。