我有一个弹性beanstalk应用程序,它同时使用Web层和工作层。通过SQS将作业从Web层卸载到工作层,以使面向Web的服务器保持快速。两种环境都使用完全相同的代码库,并在其下使用RDS实例。
我需要在工作层的领导服务器上运行cron作业。我已经创建了一个.ebextensions文件夹,其中包含一个名为crontab
的文件,如下所示(它是一个Laravel网络应用程序):
* * * * * root php /var/www/html/artisan do:something:with:database
然后,我创建了一个名为01cronjobs.config
的文件,它根据以下内容更新了根目录下的环境crontab:
container_commands:
01_remove_old_cron_jobs:
command: "crontab -r || exit 0"
02_cronjobs:
command: "cat .ebextensions/crontab | crontab"
leader_only: true
一切都很好。现在,我想使用eb deploy
命令将其部署到EB。但是,我只希望工作层承担cron作业,因为我们只能有一台服务器在整个组中运行crons。
有没有办法告诉ebextensions配置文件只在工作层上运行config命令?像worker_only: true
这样的东西在这里会很棒,但它似乎并不存在。
任何人都能提供一些有关如何实现这一目标的见解吗?谢谢。
答案 0 :(得分:5)
AWS doc中的示例:
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
commands:
python_install:
command: myscript.py
cwd: /home/ec2-user
env:
myvarname: myvarvalue
test: '[ ! /usr/bin/python ] && echo "python not installed"'