gpt4 book ai didi

node.js - 处理信号以使用 Elastic Beanstalk 上的 nodejs 应用程序正常退出?

转载 作者:行者123 更新时间:2023-12-02 11:17:19 25 4
gpt4 key购买 nike

我有这个在 Elastic Beanstalk 中运行的 Nodejs 应用程序。我想在应用程序退出时进行一些清理(例如部署新版本,重新启动应用程序服务器)。为此,我正在收听一些事件和信号,但似乎没有一个被触发。这是来自 app.js 的代码:

process.on("SIGTERM", function() {
console.log("SIGTERM, clean");
process.exit(0);
});

process.on("exit", function(code) {
console.log("Process exiting with code " + code);
});

process.on("uncaughtException", function() {
console.log("Unhandled exception occurred);
process.exit(99);
});

当我通过管理控制台重新启动应用程序时,我在日志中看不到任何内容,即使创建了一个新 Node 进程并杀死了旧 Node 进程。
如果我手动终止进程,我可以在输出中看到日志消息。这是否意味着 Beanstalk 触发的事件不会发送终止信号?如果是这样,如何优雅地退出?

编辑 : 这是更多调查的结果。
Beanstalk 使用 Upstart 来管理应用程序。在/etc/init/nodejs 中,有这一行:
exec su -s /bin/sh -c 'PATH=$PATH:$NODE_HOME/bin $EB_NODE_COMMAND 2>&1' nodejs >> /var/log/nodejs/nodejs.log

哪个运行 npm start ,它使用 package.json 配置启动应用程序。这是我拥有的进程树:
root     29155  su -s /bin/sh -c PATH=$PATH:$NODE_HOME/bin $EB_NODE_COMMAND 2>&1 nodejs
nodejs 29156 \_ sh -c PATH=$PATH:$NODE_HOME/bin $EB_NODE_COMMAND 2>&1
nodejs 29157 \_ npm
nodejs 29168 \_ node app/app.js
initctl status nodejs显示第一个进程的pid。所以我猜 Upstart 发送了一个 SIGTERM 到这个过程,它并没有将它一直转发到我的过程。不幸的是,我仍然不知道如何解决这个问题。

最佳答案

不幸的是,AWS 支持确认目前没有解决方法。已经为 Beanstalk 开发团队创建了一个功能请求,但谁知道什么时候实现。

关于node.js - 处理信号以使用 Elastic Beanstalk 上的 nodejs 应用程序正常退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34726888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com