node.js - 无法使用 PM2 和 NodeJS 捕获关闭信号
问题描述
早上好,
我在使用 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);
})
但不幸的是,这也不起作用。我实际上不知道如何解决这个问题。当我使用命令行命令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 运行时可以工作。
解决方案
推荐阅读
- asp.net - ASP.NET,MVC-IIS:此页面现在无法正常工作 错误
- python-3.x - SystemError:瓷砖无法延伸到外部图像,使用枕头包裁剪图像
- python - 在循环中以单独的数组迭代计算
- drag-and-drop - 拖动只会移动您单击的内容?
- python - Json:无法使用加载多个子词典
- python - 带有源的序列化器字段不存在于验证数据中
- c++ - g++ 找不到 stdint.h Windows
- php - 在数据透视表控制器 Laravel 8 中插入数据
- java - 如何在 Springboot 中从领事获取值数组
- ckeditor - CKEditor 4 获取父元素的尺寸