我有一个名为“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初始化程序中。此外,我想知道是否存在此脚本不止一次运行或意外停止的危险。所以我想我要求的是如何从这里最好地继续下去的一般建议。
/opt/elasticbeanstalk/hooks/appdeploy/post /中的脚本将在每个应用程序版本部署期间执行。只要你优雅地处理脚本的重启,它就会好起来。 – 2014-10-09 00:28:08