如何在aws elastic-beanstalk上自动重启节点应用程序

时间:2013-11-07 12:03:58

标签: node.js amazon-web-services elastic-beanstalk

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

实际上很少有nodejs包已经通过命令行支持它,例如forever,但是从控制台管理或awscli安装这个包并执行它以实现自动重启没有简单的方法。

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

5 个答案:

答案 0 :(得分:30)

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

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

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

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

供参考:

  • 我的EB / EC2配置为“运行Node.js的64位Amazon Linux 2014.09 v1.0”
  • 使用nginx和节点0.10.31

答案 1 :(得分:9)

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

node_modules/.bin/forever app.js

答案 2 :(得分:3)

是的,使用Supervisor的更好选择,但是为了能够在aws控制台或beanstalk cli工具的帮助下重启app服务器,你需要将自己的处理程序放到目录中的Elastic beanstalk挂钩:/ opt / elasticbeanstalk / hooks / restartappserver /颁布 Hook是放在提到的目录中的shell,python或ruby脚本。将supervisord的逻辑重新启动,你可以在管理控制台,aws cli工具(http://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/restart-app-server.html)的帮助下重新启动它,弹性beanstalk api:(http://docs.aws.amazon.com/elasticbeanstalk/latest/APIReference/API_RestartAppServer.html

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

答案 3 :(得分:0)

如果要从cron重新启动服务器,则可以使用这些命令。

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

Reference

答案 4 :(得分:0)

稍微玩了一下之后,在运行

后立即检查过程
aws elasticbeanstalk restart-app-server --environment-name my-env
来自@Human Love的评论。当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(因为它是一个节点应用程序,我为节点而烦恼)
  3. 找到特定的/opt/elasticbeanstalk脚本