Heroku console.log не работает после первого исключения при кластеризации - PullRequest
0 голосов
/ 08 ноября 2019

uncaughtException срабатывает только один раз. когда происходит процесс process.exit, то cluster.fork () запускается, чтобы поддерживать работу сервера. Но во втором исключении console.log не фиксируется. cluster.on ('online') console.log работает, но больше ничего не будет.

Существует ли безопасный способ сохранить процесс живым

Я пробовал cluster.on ('message') для передачи на главную console.log

app.start = function() {
  console.log("starting...");
  return app.listen(function() {
    app.emit('started');
    var baseUrl = app.get('url').replace(/\/$/, '');
    console.log('Web server listening at: %s', baseUrl);
    if (app.get('loopback-component-explorer')) {
      var explorerPath = app.get('loopback-component-explorer').mountPath;
      console.log('Browse your REST API at %s%s', baseUrl, explorerPath);
    }
  });
};

process.on('uncaughtException', (err) => {
    console.trace((new Date).toUTCString() + ' uncaughtException:', err.message)
    logger.error(err.stack, { argument: '3uncaughtException'})
    process.exit(1);
});


app.users = {};
    console.log("running cpus:",numCPUs," isMaster: ",cluster.isMaster)
    if (cluster.isMaster) {
        cluster.setupMaster({
        silent: true
    });

  console.log(`Master ${process.pid} is running`);
  for (let i = 0; i < numCPUs; i++) {
    var c = cluster.fork();
    // c.process.stdout.pipe(process.stdout);
    // c.process.stderr.pipe(process.stderr);
  }
  cluster.on('error', function(worker, code, signal) {
    console.log('error in process');
  })
  cluster.on('uncaughtException',function(worker, code, signal){
    console.log('worker, code, signal');
  })

  cluster.on('exit', function(worker, code, signal) {
    var msg = '[' + worker.process.pid + '] ';
    if(code == 0) {
        msg += 'worker shut down';
    } else {
        var parts = [];
        code && parts.push('code ' + code);
        signal && parts.push('signal ' + signal);
        msg += 'worker died with ' + parts.join(' and ');
    }
    var worker = cluster.fork();
    worker.on('online',function(){
      console.log('online');
    });

  });

} else {
  boot(app, __dirname,
    function(err){
      console.log("BOOT ERROR",err);
      if(err) throw err;
    });
}

В журнале должно отображаться еще одно необнаруженное после первого необработанного исключения.

...