문제

I have been looking for a while now on setting up worker nodes in a cloud native application. I plan to have an autoscaling group of worker nodes pulling jobs from a queue, nothing special there.

I am just wondering, is there any best practice way to ensure that a (eg. ruby) script is running at all times? My current assumption is that you have a script running that polls the queue for jobs and sleeps for a few seconds or so if a job query returns no new job.

What really caught my attention was the Services key in the Linux Custom Config section of AWS Elastic Beanstalk Documentation.

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

The example they give is this..

services: 
  sysvinit:
    myservice:
      enabled: true
      ensureRunning: true

I find the example and documentation extremely vague and I have no idea how to get my own service up and running using this config key, which means I do not even know if this is what I want or need to use. I have tried creating a ruby executable file and putting the name in the field, but no luck.

I asked the AWS forums for more clarification and have received no response.

If anyone has any insight or direction on how this can be achieved, I would greatly appreciate it. Thank you!

도움이 되었습니까?

해결책

I decided not to use the "services" section of the EB config files, instead just using the "commands" ..

I build a service monitor in ruby that monitors a given system process (in this case my service).

The service itself is a script looping infinitely with delays based on long polling times to the queue service.

A cron job runs the monitor every minute and if the service is down it is restarted.

다른 팁

The syntax for files in the documentation seems to be wrong. The following works for me (note square brackets instead of quotation marks):

services:
  sysvinit:
    my_service:
      enabled: true
      ensureRunning: true
      files : [/etc/init.d/my_service]
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top