保持在Elastic Beanstalk上运行Ruby服务

时间:2013-06-17 18:57:42

标签: ruby amazon-ec2 monitoring elastic-beanstalk worker

我一直在寻找在云原生应用程序中设置工作节点的时间。我计划让一个自动缩放的工作节点组从队列中拉出作业,没什么特别的。

我只是想知道,有没有最好的练习方法来确保(例如ruby)脚本一直在运行?我目前的假设是,如果作业查询没有返回新作业,那么您运行的脚本会轮询队列中的作业并休眠几秒钟。

引起我注意的是AWS Elastic Beanstalk文档的Linux Custom Config部分中的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论坛询问了更多的说明,但未收到任何回复。

如果有人对如何实现这一点有任何见解或指导,我将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:0)

我决定不使用EB配置文件的“服务”部分,而只是使用“命令”..

我在ruby中构建了一个监视给定系统进程的服务监视器(在本例中是我的服务)。

服务本身是一个脚本无限循环,基于队列服务的长轮询时间延迟。

cron作业每分钟运行一次监视器,如果服务停止,则重新启动。

答案 1 :(得分:0)

文档中的文件语法似乎是错误的。以下适用于我(注意方括号而不是引号):

services:
  sysvinit:
    my_service:
      enabled: true
      ensureRunning: true
      files : [/etc/init.d/my_service]