Amazon web services Elastic Beanstalk:如何仅在工作层上运行ebextension命令?

Amazon web services Elastic Beanstalk:如何仅在工作层上运行ebextension命令?,amazon-web-services,amazon-elastic-beanstalk,worker,Amazon Web Services,Amazon Elastic Beanstalk,Worker,我有一个弹性beanstalk应用程序,它同时使用web层和worker层。作业通过SQS从web层卸载到worker层,以保持面向web的服务器的速度。两种环境使用完全相同的代码基,并在其下使用RDS实例 我需要在工作层的leader服务器上运行cron作业。我创建了一个.ebextensions文件夹,其中包含一个名为crontab的文件,如下所示(这是一个Laravel web应用程序): 然后,我创建了一个名为01cronjobs.config的文件,该文件将根目录下的environme

我有一个弹性beanstalk应用程序,它同时使用web层和worker层。作业通过SQS从web层卸载到worker层,以保持面向web的服务器的速度。两种环境使用完全相同的代码基,并在其下使用RDS实例

我需要在工作层的leader服务器上运行cron作业。我创建了一个.ebextensions文件夹,其中包含一个名为
crontab
的文件,如下所示(这是一个Laravel web应用程序):

然后,我创建了一个名为
01cronjobs.config
的文件,该文件将根目录下的environments 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配置文件仅在工作层上运行config命令?类似于
worker\u only:true
的东西在这里很好,但它似乎不存在

有人能提供一些关于我如何实现这一目标的见解吗?谢谢

  • 设置环境属性,如“tier=worker”。弹性豆茎-->应用程序-->环境-->配置-->软件配置
  • 使用“command”键的“test”属性来测试该属性,因此只有在设置了environment属性时才能执行该命令
AWS文件中的样本:


检查环境属性的确切测试是什么?这将使这个答案更有帮助:-)@mikhuang:有点晚了,但可能会有所帮助?可以找到一个不必手动设置环境属性的简单示例
container_commands:
  01_remove_old_cron_jobs:
  command: "crontab -r || exit 0"
  02_cronjobs:
  command: "cat .ebextensions/crontab | crontab"
  leader_only: true
commands:
  python_install: 
    command: myscript.py
    cwd: /home/ec2-user
    env: 
      myvarname: myvarvalue
    test: '[ ! /usr/bin/python ] && echo "python not installed"'