Как использовать условные выражения в конфигурации .ebextensions для нескольких сред crontab (AWS Elastic Beanstalk) - PullRequest
1 голос
/ 11 апреля 2019

Я хочу добавить одно условие в cron.config файл. Мне нужно проверить ENV_ID (идентификатор среды), если идентификатор среды совпадает с производственным сервером , тогда cron установит в crontab, иначе cron не установит проверку.

cron.config

container_commands:
  01_remove_crontab:
    command: "crontab -r || exit 0"
  02_test:
    command: |
      ENV_ID=`{"Ref": "AWSEBEnvironmentId" }`
      ENV_NAME=`{"Ref": "AWSEBEnvironmentName" }`
  03_add_crontab:
    test:  [ $ENV_ID == "e-r19pphhp78l" ]
    command: "cat .ebextensions/crontab | crontab"
    leader_only: true

кронтаб

* * * * * wget https://example.com/cronrun.php >> /dev/null

Кроме того, я проверяю, работает ли условие, но теперь оно работает.

container_commands:
  01_remove_crontab:
    command: "crontab -r || exit 0"
  02_test:
    command: |
      ENV_ID=`{"Ref": "AWSEBEnvironmentId" }`
      ENV_NAME=`{"Ref": "AWSEBEnvironmentName" }`
      ENV_MYID="e-r19pphhp78l"
  03_add_crontab:
    command: |
      if [ $ENV_ID == $ENV_MYID ] then
        "cat .ebextensions/crontab | crontab"
      fi
    leader_only: true

Я не могу найти то, чего не хватает и что не так в сценарии.

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

Я нашел решение этой проблемы. Я устанавливаю значение всех сред в Elastic Beanstalk. Ниже находится настройка

Консоль AWS => Открыть Elastic Beanstalk. Выберите приложение и перейдите в одно из окружений. Там мы можем увидеть все имена окружений, в которых нам нужно перейти внутрь Configuration ", после этого перейдите в раздел программного обеспечения и нажмите" Изменить ". Найдите значения ENV_TYPE, относящиеся к среде, в которых указано, является ли это dev, stage, demo или prod и т. д. В приведенном ниже примере для объяснения используется * 1006. * Вы можете создать свою переменную по своему усмотрению и назвать ее.

Теперь нам нужно открыть cron.config файл внутри папки .ebextensions и добавить условие.

container_commands:
  01_remove_crontab:
    command: "crontab -r || exit 0"
  02_add_crontab:
    command: 'if [ "$ENV_TYPE" == "production" ]; then sudo cat .ebextensions/crontab | crontab; fi'
    command: 'if [ "$ENV_TYPE" == "development" ]; then cat .ebextensions/crontabdev | crontab; fi'
    command: 'if [ "$ENV_TYPE" == "staging" ]; then cat .ebextensions/crontabstag | crontab; fi'
    leader_only: true

Для получения более подробной информации, пожалуйста, проверьте эту ссылку: - http://www.smalldaytech.com/conditional-aws-elastic-beanstack-cron-job-for-multiple-environments/

0 голосов
/ 11 апреля 2019

Вы не можете использовать одновременно и test, и leader_only в container_commands, и если вы это сделаете, leader_only будет иметь приоритет.

эластичные документы beanstalk для container_commands

Команда может быть только лидером или иметь тест, но не оба (leader_only имеет приоритет).

...