我已经搜索了这个问题一段时间但找不到答案。 我的问题是在aws elastic-beanstalk服务器上部署nodejs应用程序时,我希望如果应用程序崩溃,nodejs应用程序将自动重启。
实际上很少有nodejs包已经通过命令行支持它,例如forever,但是从控制台管理或awscli安装这个包并执行它以实现自动重启没有简单的方法。
我想知道如何解决aws eb上的重启问题?
答案 0 :(得分:30)
我已经确认(截至2015年3月11日)EB确实为您重新启动了节点。
为了确认,我在我的应用中添加了一个隐藏的查询参数:
if (req.query.testcrash == 'true') {
setTimeout(function(){
undefined.crashMe();
}, 100);
}
然后在日志中验证发生了异常,并且我的应用程序已重新启动。
供参考:
答案 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
答案 4 :(得分:0)
稍微玩了一下之后,在运行
后立即检查过程aws elasticbeanstalk restart-app-server --environment-name my-env
# 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
(因为它是一个节点应用程序,我为节点而烦恼)找到特定的/opt/elasticbeanstalk
脚本