如何在 AWS Elastic-Beanstalk 上自动重新启动节点应用程序



我已经用谷歌搜索了这个问题一段时间,但找不到答案。我的问题是,在 aws 弹性-beanstalk 服务器上部署 nodejs 应用程序时,我希望 nodejs 应用程序在应用程序崩溃时自动重新启动。

实际上,很少有nodejs软件包已经通过命令行支持此功能,例如永远,但是控制台管理或awscli没有简单的方法来安装此软件包并执行它以实现自动重启。

我想知道您如何解决 aws eb 上的重启问题?

我已经确认(截至2015年3月11日)EB确实为您重新启动节点。

为了确认,我在应用程序中添加了一个隐藏的查询参数:

if (req.query.testcrash == 'true') {
    setTimeout(function(){
        undefined.crashMe();
    }, 100);
}

然后在日志中验证是否发生了异常,并且我的应用程序已重新启动。

供参考:

  • 我的 EB/EC2 配置是"64 位 Amazon Linux 2014.09 v1.0.9 运行 Node.js"
  • 使用 nginx 和节点 0.10.31

永久添加到您的 package.json 中,以便它自动安装。然后在 EB 控制台的配置下,自定义节点命令:

node_modules/.bin/forever app.js

是的,使用 Supervisor 是更好的选择,但是为了能够在 AWS 控制台或 beanstalk CLI 工具的帮助下重新启动应用程序服务器,您需要将自己的处理程序放入目录中的 Elastic beanstalk 钩子:/opt/elasticbeanstalk/hooks/restartappserver/enactHook 是放置在上述目录中的 shell、python 或 ruby 脚本。将主管重启的逻辑放在这里,您将能够在管理控制台、AWS CLI 工具 (http://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/restart-app-server.html)、Elastic beanstalk API 的帮助下重新启动它:(http://docs.aws.amazon.com/elasticbeanstalk/latest/APIReference/API_RestartAppServer.html)

如何添加钩子,安装监督程序等,你可以在这里阅读:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html

在稍微玩了一下之后,并在运行后立即检查进程

aws elasticbeanstalk restart-app-server --environment-name my-env

来自@Human爱的评论。我找到了这两个命令,用于在 ssh 进入 EC2 时手动启动/停止进程。不确定这些是否被推荐,但为了快速调试,我发现它们很有用

# to start the process
python /opt/elasticbeanstalk/containerfiles/ebnode.py --action start-all
# to stop the process
sudo python /opt/elasticbeanstalk/containerfiles/ebnode.py --action stop-all

[注意]:这是一个特定于 NodeJS 的解决方案。尽管其他应用程序类型可能非常相似。检查确切的命令。打开两个终端窗口和

  1. 首先,运行aws elasticbeanstalk restart-app-server --environment-name my-env
  2. 在第二个中,运行ps aux | grep python(我为 node 进行了搜索,因为它是一个节点应用程序)

查找特定/opt/elasticbeanstalk脚本

如果你想从cron重新启动服务器,那么你可以使用这些命令。

aws elasticbeanstalk restart-app-server --environment-name my-env

参考

是的,确实如此。我知道,因为在进入盒子后,我做到了:

sudo pkill node

然后我可以验证:

  1. 应用程序继续从浏览器工作
  2. 它通过以下方式打印重新启动以记录可见: sudo tail /var/log/web.stdout.log -f
  3. 具有新进程 ID 的新节点进程通过以下方式取代其可见位置:pgrep node

最新更新