【问题标题】:how to restart node application automatically on aws elastic-beanstalk如何在 aws elastic-beanstalk 上自动重启节点应用程序
【发布时间】:2013-11-19 01:40:28
【问题描述】:

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

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

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

【问题讨论】:

  • 对不起,我删除了我的答案,因为经过额外考虑,它看起来与问题无关。我可以建议为您的应用程序创建一个小型 forever-powered 包装器,然后部署它。
  • 我不是 100%,但我很确定 EB 会为您重新启动应用程序。有人愿意确认或否认吗?
  • @Eric 我也想知道这个。

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


【解决方案1】:

是的。我知道是因为在 ssh 进入盒子后我做到了:

sudo pkill node

然后我可以验证:

  1. 应用继续在浏览器中运行
  2. 它将重新启动打印到通过以下方式可见的日志:sudo tail /var/log/web.stdout.log -f
  3. 具有新进程 ID 的新节点进程通过以下方式可见:pgrep node

【讨论】:

    【解决方案2】:

    玩了一会儿,运行后立即检查进程

    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(我用grep了node,因为它是一个node应用程序)

    找到具体的/opt/elasticbeanstalk脚本

    【讨论】:

      【解决方案3】:

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

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

      Reference

      【讨论】:

      • 这不是该问题的最理想答案。 OP 想在崩溃后自动重启。 cron 将是一个定时事件。话虽如此,你帮了我很多忙。在进行测试时,我正在寻找一种按需重新启动应用程序的方法。谢谢!
      • @BoomShadow 欢迎您!我很高兴您找到了某种有用的答案。非常感谢!
      【解决方案4】:

      我已确认(截至 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.9”
      • 使用 nginx 和节点 0.10.31

      【讨论】:

      • 是的,我可以确认节点服务器在崩溃时自动重启
      • 是否有任何其他链接或文档详细说明了此行为及其内部管理方式?
      • 它通过简单地使用新贵respawn 选项来做到这一点。默认情况下,它设置了最多 30 次重启的重生限制,每 60 秒,如果进程在该时间内重启的次数超过该时间,它将不会再次启动,直到手动完成。
      • @Cybolic:您能否提供一个参考,或者解释一下您是如何了解到这种在 60 秒内重生多达 30 次的?
      • @RobJohansen:在 /etc/init/nodejs.conf 的新贵脚本中。有两行,respawnrespawn limit 30 60。 upstart 中的文档位于 upstart.ubuntu.com/cookbook/#id193>,其中指出:respawn limit COUNT INTERVAL | unlimited Respawning is subject to a limit. If the job is respawned more than COUNT times in INTERVAL seconds, it will be considered to be having deeper problems and will be stopped.
      【解决方案5】:

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

      node_modules/.bin/forever app.js
      

      【讨论】:

      • 我从来不知道.bin 文件夹。这非常有帮助。
      【解决方案6】:

      是的,使用 Supervisor 的更好选择,但是为了能够在 aws 控制台或 beanstalk cli 工具的帮助下重新启动应用服务器,您需要将自己的处理程序放入目录中的 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

      【讨论】:

        猜你喜欢
        • 2018-09-14
        • 2017-11-26
        • 2012-08-07
        • 2018-03-18
        • 2013-10-21
        • 1970-01-01
        • 2020-05-15
        • 2019-05-16
        • 1970-01-01
        相关资源
        最近更新 更多