让 Ruby 服务在 Elastic Beanstalk 上运行
Posted
技术标签:
【中文标题】让 Ruby 服务在 Elastic Beanstalk 上运行【英文标题】:Keeping a Ruby Service running on Elastic Beanstalk 【发布时间】:2013-06-13 20:04:02 【问题描述】:我一直在寻找在云原生应用程序中设置工作节点的方法。我计划让一组自动缩放的工作节点从队列中拉出作业,这没什么特别的。
我只是想知道,是否有任何最佳实践方法可以确保(例如 ruby)脚本始终运行?我目前的假设是,您正在运行一个脚本,该脚本会轮询队列中的作业,如果作业查询没有返回新作业,则会休眠几秒钟左右。
真正引起我注意的是 AWS Elastic Beanstalk 文档的 Linux 自定义配置部分中的 Services 键。
00_start_service.config
services:
sysvinit:
<name of service>:
enabled: true
ensureRunning: true
files: "<file name>"
sources: "<directory>"
packages:
<name of package manager>:
<package name>: <version>
commands:
<name of command>:
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
他们给出的例子是这样的..
services:
sysvinit:
myservice:
enabled: true
ensureRunning: true
我发现示例和文档非常模糊,我不知道如何使用此配置键启动和运行我自己的服务,这意味着我什至不知道这是否是我想要或需要使用的。我尝试创建一个 ruby 可执行文件并将名称放在字段中,但没有运气。
我向 AWS 论坛询问了更多说明,但没有收到任何回复。
如果有人对如何实现这一点有任何见解或方向,我将不胜感激。谢谢!
【问题讨论】:
【参考方案1】:我决定不使用 EB 配置文件的“服务”部分,而只使用“命令”..
我在 ruby 中构建了一个服务监视器来监视给定的系统进程(在本例中是我的服务)。
服务本身是一个无限循环的脚本,延迟基于对队列服务的长轮询时间。
cron 作业每分钟运行一次监视器,如果服务关闭,它会重新启动。
【讨论】:
我遇到了类似的问题,但使用的是 Python。命令不是挂起安装过程还是作为 bg 进程调用它(“&”)? @winwaed 嘿,抱歉通知晚了。我开始使用 Upstart,它允许您创建系统服务并保持运行! 谢谢 - 我去看看。【参考方案2】:文档中文件的语法似乎是错误的。以下对我有用(注意方括号而不是引号):
services:
sysvinit:
my_service:
enabled: true
ensureRunning: true
files : [/etc/init.d/my_service]
【讨论】:
以上是关于让 Ruby 服务在 Elastic Beanstalk 上运行的主要内容,如果未能解决你的问题,请参考以下文章
有人知道 AWS Elastic Beanstalk 支持原生 ruby 吗?
创建 AWS Elastic Beanstalk Ruby/Rails 应用程序环境 [AWS 免费套餐] 时使用了哪些 AWS 资源/服务?
如何在 elastic-beanstalk 中应用 ruby 版本补丁
Elastic Beanstalk Ruby 进程消耗 CPU