Я использую pm2 для управления процессом в моем приложении expressjs express (работает в режиме кластера).pm2 не перезапускает работника при возникновении явной ошибки
У нас было 2 вида обработчика ошибок
ПЕРВЫЙ: 'uncaughtException' будет обрабатываться с
process.on('uncaughtException', function(err){});
На самом деле, я не объявить обработчик, как это дело того, чтобы позволить pm2 обнаруживает умершего работника в этом случае, поэтому перезапустите умершего работника автоматически.
ВТОРАЯ: экспресс-обработчик ошибок, я имею в виду ошибка будет перенаправлен выразить обработчик ошибок, не uncaughtException обработчик, обработчик ошибок, как показано ниже
app.use(function(err, req, res, next) {})
Я также не заявить об этом обработчик ошибок для той же цели, что и uncaughtException. Но pm2 не перезапускает узел в этом случае.
Есть идеи по поводу этой проблемы? Большое спасибо
Есть ли необходимость перезапуска вашего приложения? Если я не ошибаюсь, приложение все еще работает и может отвечать на новые запросы. Поскольку исключение было пойманным, вы должны ответить в явном обработчике ошибок с некоторой хорошей страницей, говорящей о том, что возникла проблема, а не позволять браузеру браузера на время ожидания. – Molda
Да, когда ошибка поймана экспресс-обработчиками ошибок, сервер не будет разбит. Но исключение означает, что в вашем коде есть некоторые проблемы, и, возможно, сервер окажется в нестабильном состоянии, и вы не можете знать, что он может отреагировать на запрос в будущем. Я думаю, в этом случае мы должны перезапустить этот узел. – thelonglqd
Затем вы можете попробовать process.exit (0) в обработчике ошибок после того, как вы зарегистрируете случившееся. pm2 должен перезапустить его. – Molda