Bash
無法從 CRON(憑證)執行 AWS CLI
嘗試執行簡單的 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
我只是在開始看到錯誤後才將該行添加到配置文件中,認為這可能會解決它(儘管我很確定 AWS 預設情況下就是這樣)。
Shell 腳本以 root 身份執行。我可以在指定位置看到 AWS 配置文件。這一切對我來說都很好(就像我說的,它在 CRON 之外執行良好)。
如果它在您直接執行而不是從 cron 執行時有效,則環境中可能存在一些不同。您可以通過執行以互動方式保存您的環境
set | sort > env.interactive
在你的腳本中做同樣的事情
set | sort > /tmp/env.cron
然後
diff /tmp/env.cron env.interactive
看看有什麼重要的。像這樣的事情PATH
是最有可能的罪魁禍首。
當您從 crontab 執行作業時,您的
$HOME
環境變數是/
亞馬遜客戶尋找
~/.aws/config
或者
~/.aws/credentials
如果
$HOME
=/
,則客戶端將找不到這些文件要使其工作,請更新您的腳本,以便它導出一個實際的主目錄
$HOME
export HOME=/root
然後將配置或憑據文件放入
/root/.aws/