Когда я использую PM2 для запуска нескольких процессов (т. е. в режиме кластера) и один из этих процессов сталкивается с неперехваченной ошибкой, PM2 не перезапускает этот процесс.
Почему?
Как заставить его перезапускать рабочие процессы в режиме кластера?
Пример кода
// index.js
let counter = 0;
setInterval(function(){
if(counter >= 5) {
throw new Error('Worker crash. Why no restart?');
}
counter++;
console.log('Worker alive: ' + Date.now() );
},500);
Выполнить в строке cmd
pm2 start index.js -i 4
pm2 log
В конце концов все рабочие процессы аварийно завершают работу и никогда не перезапускаются.
Какой смысл в перезапуске, если это можно сделать только для одного процесса.
журналы pm2 (объединены в один файл)
Worker alive: 1522937847186
Worker alive: 1522937847231
Worker alive: 1522937847276
Worker alive: 1522937847324
Worker alive: 1522937847691
Worker alive: 1522937847736
Worker alive: 1522937847781
Worker alive: 1522937847830
Worker alive: 1522937848193
Worker alive: 1522937848238
Worker alive: 1522937848283
Worker alive: 1522937848332
Worker alive: 1522937848693
Worker alive: 1522937848738
Worker alive: 1522937848783
Worker alive: 1522937848832
Worker alive: 1522937849194
Worker alive: 1522937849238
Worker alive: 1522937849284
Worker alive: 1522937849333
Error: Worker crash. Why no restart?
at Timeout._onTimeout (/home/usrname/docs/Projects_NodeJS/project/app/index.js:49:11)
at ontimeout (timers.js:466:11)
at tryOnTimeout (timers.js:304:5)
at Timer.listOnTimeout (timers.js:267:5)
Error: Worker crash. Why no restart?
at Timeout._onTimeout (/home/usrname/docs/Projects_NodeJS/project/app/index.js:49:11)
at ontimeout (timers.js:466:11)
at tryOnTimeout (timers.js:304:5)
at Timer.listOnTimeout (timers.js:267:5)
Error: Worker crash. Why no restart?
at Timeout._onTimeout (/home/usrname/docs/Projects_NodeJS/project/app/index.js:49:11)
at ontimeout (timers.js:466:11)
at tryOnTimeout (timers.js:304:5)
at Timer.listOnTimeout (timers.js:267:5)
Error: Worker crash. Why no restart?
at Timeout._onTimeout (/home/usrname/docs/Projects_NodeJS/project/app/index.js:49:11)
at ontimeout (timers.js:466:11)
at tryOnTimeout (timers.js:304:5)
at Timer.listOnTimeout (timers.js:267:5)
process.exit(1);
в исключении, чтобы убедиться, что процесс умирает. Теперь мы можем проверить, перезапускается ли процесс. Если это так, PM2 поступает правильно. также, каков результатPM2 status
- person AbhinavD   schedule 05.04.2018process.exit(1 or even 0)
не помогло, и я не поймал исключение. Если бы я запустил программу без PM2, она бы вылетела, как обычно. - person Thiago P   schedule 05.04.2018