Goodmorning,
У меня много трудностей с захватом сигналов выключения на сервере, работающем с PM2.Я уже прочитал много статей и перепробовал много ответов, но, похоже, ничего не работает.
Моя настройка: PM2 v2.10.0 (из-за некоторых проблем с запуском новейшего PM2 (3.2.2 и 3.2.3) связана с постоянно появляющимся экраном CMD), NodeJS v6.11.3 (поскольку это версия, поддерживаемая нашим приложением), Windows 10.0.17134, сборка 17134
Я пробовал следующие решения:
process.on('SIGINT', () => {
console.info("Received the SIGINT signal to shut down.");
})
process.on('SIGTERM', () => {
console.info('Received the SIGTERM signal to shut down');
})
process.on('message', (msg) => {
console.info('Message received');
if (msg == 'shutdown') {
console.info('Shutdown message received');
}
})
process.on('exit', () => {
console.info('Received exit signal');
})
Из которых я позже прочитал, что это будет работать только на Linux, а не на Windows.В Windows предлагаемое решение:
var rl = require("readline").createInterface({
input: process.stdin,
output: process.stdout
});
rl.on("SIGINT", function () {
console.info('Inside readline SIGNINT')
process.emit("SIGINT");
});
rl.on('SIGTERM', function () {
console.info('Inside readline SIGTERM')
process.emit('SIGTERM')
});
rl.on('message', function (msg) {
console.info('Inside readline message')
process.emit(msg);
})
Но, к сожалению, это тоже не сработало.Я на самом деле в недоумении, как решить эту проблему.Когда я запускаю server.js с помощью командной строки node server.js , я вижу, что он правильно перехватывает сигналы с помощью приведенного выше кода.
Кто-нибудь знает, что можетздесь происходит?Я также попытался обновить версию PM2 до последней (3.2.3), но безрезультатно.
ОБНОВЛЕНИЕ
Что я вижу в pm2.log - это многократно напечатанная строка:
2018-12-13T11:07:43: PM2 log: App [PROXY:0] exited with code [1] via signal [SIGINT]
Это указывало бы на то, что мой сервер NodeJS не завершает свою работу должным образом, но я также не могу понять, в чем проблема, так как он работает, когдазапустить его из CMD.