Перезапустить приложение Node.js, когда возникает неотображенное исключение

Как я могу перезапустить свое приложение, когда возникает исключение?

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

Ответ 1

Вы можете запустить процесс как вилку другого процесса, так что вы можете разветкить его, если он умрет. Для этого вы использовали бы встроенный 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
}

Этот код порождает один рабочий процесс, и если в рабочем процессе возникает ошибка, он будет закрыт, а выход будет повторять другой рабочий процесс.

Ответ 2

У вас есть несколько вариантов.

  • Перезапустите приложение с помощью монитора, например nodemon/forever

    process.on('uncaughtException', function (err) {
      console.log(ERR);   // Отправить уведомление об ошибке
      process.exit(1); });

    запустите свое приложение, используя

    nodemon./server.js

    forever server.js start

  • Перезагрузитесь с помощью 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);
  }
}

Ответ 3

checkout nodemon и forever. Я использую nodemon для разработки и навсегда для производства. Работает как шарм. просто запустите приложение с помощью nodemon app.js.