bin*_*nic 34 shell bash cron amazon-web-services
尝试运行一个简单的 AWS CLI 备份脚本。它遍历包含文件中的行,将这些路径备份到 S3,并将输出转储到日志文件。当我直接运行此命令时,它运行没有任何错误。当我通过 CRON 运行它时,我的输出日志中出现“无法找到凭据”错误。
外壳脚本:
AWS_CONFIG_FILE="~/.aws/config"
while read p; do
/usr/local/bin/aws s3 cp $p s3://PATH/TO/BUCKET --recursive >> /PATH/TO/LOG 2>&1
done </PATH/TO/INCLUDE/include.txt
Run Code Online (Sandbox Code Playgroud)
我只是在开始看到错误后才将这一行添加到配置文件中,我认为这可能会解决它(尽管我很确定这是 AWS 默认的样子)。
Shell 脚本以 root 身份运行。我可以在指定位置看到 AWS 配置文件。我觉得这一切都很好(就像我说的,它在 CRON 之外运行良好)。
Gar*_*aid 41
当您从 crontab 运行作业时,您的$HOME
环境变量是/
亚马逊客户寻找
~/.aws/config
Run Code Online (Sandbox Code Playgroud)
或者
~/.aws/credentials
Run Code Online (Sandbox Code Playgroud)
如果$HOME
= /
,则客户端将找不到这些文件
为了让它工作,更新你的脚本,以便它导出一个实际的主目录 $HOME
export HOME=/root
Run Code Online (Sandbox Code Playgroud)
然后将配置或凭据文件放入
/root/.aws/
Run Code Online (Sandbox Code Playgroud)
chi*_*cks 23
如果它在您直接运行而不是从 cron 运行时有效,则环境中可能有些不同。您可以通过执行以下操作以交互方式保存您的环境
set | sort > env.interactive
Run Code Online (Sandbox Code Playgroud)
在你的脚本中做同样的事情
set | sort > /tmp/env.cron
Run Code Online (Sandbox Code Playgroud)
然后diff /tmp/env.cron env.interactive
看看什么是重要的。诸如此类PATH
的事情最有可能是罪魁祸首。
小智 6
我能够通过以下方式解决这个问题:
export AWS_CONFIG_FILE="/root/.aws/config"
export AWS_ACCESS_KEY_ID=XXXX
export AWS_SECRET_ACCESS_KEY=YYYY
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
42922 次 |
最近记录: |