Bash-获取输出并将其放在文件中的特定位置
我有python脚本为S3生成AWS签名密钥。它生成两个值:Bash-获取输出并将其放在文件中的特定位置,bash,amazon-web-services,nginx,Bash,Amazon Web Services,Nginx,我有python脚本为S3生成AWS签名密钥。它生成两个值: GZkXNl6Leat71ckcwfxGuiHxt9fnkj47F1SbVjRu/t0= 20190129/eu-west-2/s3/aws4_request 两者的有效期均为7天。我想要的是在Docker容器中使用cron每五天运行一次脚本,获取输出并在Nginx配置中放置/替换值 配置: 然后在容器中重新启动nginx假设值存储在val_文件中,将它们插入nginx.conf,这个简单的解决方案应该可以做到- $: cat sc
GZkXNl6Leat71ckcwfxGuiHxt9fnkj47F1SbVjRu/t0=
20190129/eu-west-2/s3/aws4_request
两者的有效期均为7天。我想要的是在Docker容器中使用cron每五天运行一次脚本,获取输出并在Nginx配置中放置/替换值
配置:
然后在容器中重新启动nginx假设值存储在
val_文件中
,将它们插入nginx.conf
,这个简单的解决方案应该可以做到-
$: cat script
#! /bin/env bash
{ read -r val1 # read the first line
read -r val2 # read the second line
sed -i "s!FIRST_VALUE!$val1!;
s!SECOND_VALUE!$val2!;
" nginx.conf
} < val_file
$: script
$: cat nginx.conf
server {
listen 80;
aws_access_key 'AKIDEXAMPLE';
aws_signing_key GZkXNl6Leat71ckcwfxGuiHxt9fnkj47F1SbVjRu/t0=;
aws_key_scope 20190129/eu-west-2/s3/aws4_request;
aws_s3_bucket s3_bucket_name;
location / {
aws_sign;
proxy_pass http://s3_bucket_name.s3.amazonaws.com;
}
$:cat脚本
#! /bin/env bash
{read-r val1}读第一行
读-r val2#读第二行
sed-i“s!第一个值!$val1!;
s!秒值!$val2!;
“nginx.conf
}
卷发使单输入同时提供
读取和读取。然后它只是一个sed
,使用!
,因为您的数据中有标准的前斜杠。在sed
上双引号允许嵌入变量-不理想,但在这里看起来还可以。问题是什么?您知道如何调用python吗?您知道吗如何使其写入输出?您知道如何捕获该输出吗?您知道如何修改nginx配置吗?您知道如何编辑脚本吗?结合这些问题的答案(可能还有更多),完成了。问题在主题中。Python脚本在输出中给出了这两行代码。我需要将它们放在上面的Nginx配置中。啊,所以你只需要有人为你编写脚本,而实际上你没有具体的问题。我想说,问题唯一困难的部分是说服cron每5天运行一次。它会变得很难cky大约在月底,如果您允许自己使用格式为0/5
的日期说明符,这会容易得多。但是避免使用cron可能更容易,只需在sleep 432000;do cmd;done
时执行,其中cmd是执行所需操作的命令。是的,William我要求为我编写它,您是对的t关于cron,但它也应该与[$($(($((date+%-j
-1))%5]==0]一起工作。睡眠是我将尝试的另一个选项。这很有效,谢谢。但是我发现我需要使用cron运行它,其中nginx.conf中的值将包含previous(过期)签名密钥。因此,我将尝试替换以下值:aws_-signing_-key之后和之前的值“;”然后尝试sed-I的!aws_-signing_-key.*$!aws_-signing_-key'$val1';s!aws_-key_-scope.*$!aws_-key_-scope'$val2'!'nginx.conf
:)`
$: cat script
#! /bin/env bash
{ read -r val1 # read the first line
read -r val2 # read the second line
sed -i "s!FIRST_VALUE!$val1!;
s!SECOND_VALUE!$val2!;
" nginx.conf
} < val_file
$: script
$: cat nginx.conf
server {
listen 80;
aws_access_key 'AKIDEXAMPLE';
aws_signing_key GZkXNl6Leat71ckcwfxGuiHxt9fnkj47F1SbVjRu/t0=;
aws_key_scope 20190129/eu-west-2/s3/aws4_request;
aws_s3_bucket s3_bucket_name;
location / {
aws_sign;
proxy_pass http://s3_bucket_name.s3.amazonaws.com;
}