早安,
在使用PM2运行的服务器中捕获关闭信号时,我遇到了很多困难。 我已经阅读了很多文章,并尝试了很多答案,但是似乎没有任何效果。
我的设置: PM2 v2.10.0(由于与持续弹出CMD屏幕有关而运行最新的PM2(3.2.2和3.2.3)存在一些问题), 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);
})
但是不幸的是,这也不起作用。实际上,我对如何解决这个问题感到茫然。 当我使用命令行命令 node server.js 运行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运行它。