如何在 crontab 多环境 (AWS Elastic Beanstalk) 的 .ebextensions 配置中使用条件
How to use conditional in .ebextensions config for crontab multiple environments (AWS Elastic Beanstalk)
我想在 cron.config
文件中添加一个条件。如果环境 ID 与 生产服务器 匹配,我需要检查 ENV_ID
(环境 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
crontab
* * * * * 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
我找不到缺少的内容和错误的脚本。
您不能在 container_commands
中同时使用 test
和 leader_only
,如果您这样做,leader_only
将优先。
elastic beanstalk docs on container_commands
A command can be leader-only or have a test, but not both (leader_only takes precedence).
我找到了解决这个问题的方法。我在 Elastic Beanstalk 中设置了所有环境值。下面是设置
AWS 控制台 => 打开 Elastic Beanstalk
。 Select 应用程序并转到环境之一。在那里我们可以看到所有环境名称,因为我们需要进入 Configuration
",然后转到软件部分并单击修改。查找特定于环境的 ENV_TYPE
值,它指定是否是dev, stage, demo or prod等。下面的例子用ENV_TYPE
来说明。你可以根据需要创建你的变量并命名。
现在我们需要打开 .ebextensions
文件夹中的 cron.config
文件并添加条件。
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
有关详细信息,请查看此 link:-
http://www.smalldaytech.com/conditional-aws-elastic-beanstack-cron-job-for-multiple-environments/
我想在 cron.config
文件中添加一个条件。如果环境 ID 与 生产服务器 匹配,我需要检查 ENV_ID
(环境 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
crontab
* * * * * 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
我找不到缺少的内容和错误的脚本。
您不能在 container_commands
中同时使用 test
和 leader_only
,如果您这样做,leader_only
将优先。
elastic beanstalk docs on container_commands
A command can be leader-only or have a test, but not both (leader_only takes precedence).
我找到了解决这个问题的方法。我在 Elastic Beanstalk 中设置了所有环境值。下面是设置
AWS 控制台 => 打开 Elastic Beanstalk
。 Select 应用程序并转到环境之一。在那里我们可以看到所有环境名称,因为我们需要进入 Configuration
",然后转到软件部分并单击修改。查找特定于环境的 ENV_TYPE
值,它指定是否是dev, stage, demo or prod等。下面的例子用ENV_TYPE
来说明。你可以根据需要创建你的变量并命名。
现在我们需要打开 .ebextensions
文件夹中的 cron.config
文件并添加条件。
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
有关详细信息,请查看此 link:- http://www.smalldaytech.com/conditional-aws-elastic-beanstack-cron-job-for-multiple-environments/