Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash-获取输出并将其放在文件中的特定位置_Bash_Amazon Web Services_Nginx - Fatal编程技术网

Bash-获取输出并将其放在文件中的特定位置

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

我有python脚本为S3生成AWS签名密钥。它生成两个值:

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;
    }