2015-02-10 58 views
3

我有一个利用web层和worker层的弹性beanstalk应用程序。作业通过SQS从Web层卸载到工作层,以保持面向网络的服务器的速度。两种环境都使用完全相同的代码库,并在其下使用RDS实例。Elastic Beanstalk:我如何仅在工作层上运行ebextension命令?

我需要在工作层的引导服务器上运行cron作业。我创建了一个.ebextensions用它叫做crontab文件,如下所示(这是一个Laravel Web应用程序)文件夹:

* * * * * 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工作,因为我们只能有一台服务器在整个组中运行cron。

有没有办法告诉ebextensions配置文件只有在工作层上运行配置命令?像worker_only: true就像这里很棒,但它似乎并不存在。

任何人都可以提供一些见解我如何实现这一目标?谢谢。

回答

4
  • 设置环境属性,如“tier = worker”。 Elastic Beanstalk - >应用程序 - >环境 - >配置 - >软件配置。
  • 使用“command”键的“test”属性来测试这个属性,所以只有在设置了环境属性时才执行该命令。

样品从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"' 
+0

会是什么检查的环境属性是准确的测试?这将使这个答案更有帮助:-) – mikhuang 2018-02-05 21:37:18

相关问题