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

bihw5rsg  于 2023-03-17  发布在  Node.js
关注(0)|答案(3)|浏览(120)

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

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

4ioopgfo1#

你可以把这个进程当作另一个进程的fork来运行,这样你就可以在它死了的时候再把它fork,你可以使用原生的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
}

这段代码生成一个辅助进程,如果在辅助进程中引发错误,它将关闭,退出将重新生成另一个辅助进程。

raogr8fs

raogr8fs2#

你有几个选择..
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);
  });
}
57hvy0tb

57hvy0tb3#

checkout nodemonforever。我使用nodemon进行开发,永远用于生产。工作起来很有魅力。只需用nodemon app.js启动你的应用程序。

相关问题