Невозможно поймать сигналы выключения с PM2 и NodeJS - PullRequest
0 голосов
/ 13 декабря 2018

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.

...