我已经用谷歌搜索了这个问题一段时间,但找不到答案。我的问题是在 aws elastic-beanstalk 服务器上部署 nodejs 应用程序时,如果应用程序崩溃,我希望 nodejs 应用程序会自动重新启动。
实际上很少有nodejs包已经通过命令行支持这个,比如forever,但是从控制台管理或者awscli没有简单的方法来安装这个包并执行它来实现自动重启。
我想知道您如何解决aws eb上的重启问题?
我已经用谷歌搜索了这个问题一段时间,但找不到答案。我的问题是在 aws elastic-beanstalk 服务器上部署 nodejs 应用程序时,如果应用程序崩溃,我希望 nodejs 应用程序会自动重新启动。
实际上很少有nodejs包已经通过命令行支持这个,比如forever,但是从控制台管理或者awscli没有简单的方法来安装这个包并执行它来实现自动重启。
我想知道您如何解决aws eb上的重启问题?
我已经确认(截至 2015 年 3 月 11 日)EB 确实为您重启了节点。
为了确认,我在我的应用程序中添加了一个隐藏的查询参数:
if (req.query.testcrash == 'true') {
setTimeout(function(){
undefined.crashMe();
}, 100);
}
然后在日志中验证发生了异常,并且我的应用程序已重新启动。
以供参考:
永远添加到您的 package.json 以便它自动安装。然后在 EB 控制台中,在配置下,自定义节点命令:
node_modules/.bin/forever app.js
是的,使用 Supervisor 的更好选择,但是为了能够在 aws 控制台或 beanstalk cli 工具的帮助下重新启动应用程序服务器,您需要将自己的处理程序放入目录中的 Elastic beanstalk 挂钩:/opt/elasticbeanstalk/hooks/restartappserver/ enact Hook 是放置在上述目录中的 shell、python 或 ruby 脚本。将 supervisord 重新启动的逻辑放在这里,您将能够在管理控制台、aws cli 工具的帮助下重新启动它(http://docs.aws.amazon.com/cli/latest/reference/elasticbeanstalk/restart-app-server .html),弹性beantalk 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
在玩了这个之后,并在运行后立即检查进程
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 特定的解决方案。尽管其他应用程序类型可能非常相似。检查确切的命令。打开两个终端窗口和
aws elasticbeanstalk restart-app-server --environment-name my-env
ps aux | grep python
(我 grepped 节点,因为它是一个节点应用程序)找到特定的/opt/elasticbeanstalk
脚本
是的,它确实。我知道是因为在进入盒子后我做了:
sudo pkill node
然后我可以验证:
sudo tail /var/log/web.stdout.log -f
pgrep node