1

我有一个名为“my-env”的Elastic Beanstalk Web服务器环境。我希望my-env在启动时执行以下bash命令:bundle exec rake jobs:work。我是EB新手,我的Bash是平庸的(充其量)。我昨天挥动了一整天,并与该作品,.ebextensions/start_worker.config以下上来:如何在Elastic Beanstalk启动时守护Rails Rake任务

编辑:事实上,以下不能正常工作。它似乎最初工作正常,然后开始产生错误。也许环境改变了?

commands: 
    create_post_dir: 
    command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post" 
    ignoreErrors: true 
files: 
    "/usr/sbin/jobs_worker.sh": 
    mode: "000755" 
    owner: root 
    group: root 
    content: | 
     #!/usr/bin/env bash 
     . /opt/elasticbeanstalk/support/envvars 
     export PATH=/home/ec2-user/.gem/ruby/2.1.2/bin:/opt/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/bin:/opt/rubies/ruby-2.1.2/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/bin 
     cd $EB_CONFIG_APP_CURRENT 
     su -c "RAILS_ENV=production bundle exec rake jobs:work" $EB_CONFIG_APP_USER 
     echo "worker starting" >> /var/log/directory-hooks-executor.log  
    "/opt/elasticbeanstalk/hooks/appdeploy/post/99_restart_delayed_job.sh": 
    mode: "000755" 
    owner: root 
    group: root 
    content: | 
     #!/usr/bin/env bash 
     nohup /usr/sbin/jobs_worker.sh 0<&- &> /var/log/directory-hooks-executor.log & 

因此,这创造了一个/opt/elasticbeanstalk/hooks/appdeploy/post脚本,以便EB自动执行它,当我部署。我不得不守护神,以便脚本不会妨碍EB的启动顺序。

所以我怀疑这是否会长期运作良好。如果能够做得更清洁,我将不胜感激。也许通过一个linux服务,或者在一个Rails初始化程序中。此外,我想知道是否存在此脚本不止一次运行或意外停止的危险。所以我想我要求的是如何从这里最好地继续下去的一般建议。

回答

2

我相信我找到了合适的解决方案。我安装了红宝石宝石:“守护进程”并将脚本切换到:

commands: 
    create_post_dir: 
    command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post" 
    ignoreErrors: true 
    webapp_pids: 
    command: "mkdir /home/webapp/pids" 
    ignoreErrors: true 
files: 
    "/opt/elasticbeanstalk/hooks/appdeploy/post/99_restart_delayed_job.sh": 
    mode: "000755" 
    owner: root 
    group: root 
    content: | 
     #!/usr/bin/env bash 
     . /opt/elasticbeanstalk/support/envvars 
     chown webapp:webapp /home/webapp/pids 
     su -l -c "$EB_CONFIG_APP_CURRENT/bin/delayed_job --pid-dir=/home/webapp/pids restart" $EB_CONFIG_APP_USER 
     echo "worker starting" >> /var/log/directory-hooks-executor.log  

到目前为止似乎工作。

+1

/opt/elasticbeanstalk/hooks/appdeploy/post /中的脚本将在每个应用程序版本部署期间执行。只要你优雅地处理脚本的重启,它就会好起来。 – 2014-10-09 00:28:08