我有这个脚本:
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
SHELL=/bin/bash
# Create EBS Data snapshot
/usr/local/bin/aws ec2 create-snapshot --volume-id "vol-XXXXX" --description "test"
如果我从shell运行它,它可以很好地工作,但对Cron没有任何作用。为什么?我正在使用IAM角色,这很重要吗?
答案 0 :(得分:7)
以root用户身份运行aws configure
并没有帮助我,因为我已经配置了凭据,并且脚本直接从命令行为root用户运行得非常愉快,但仍然无法运行通过cron。
我收到的错误信息是;
Unable to locate credentials. You can configure credentials by running "aws configure".
帮助我的是在crontab文件的顶部添加以下行,以便为通过cron运行的所有脚本提供适当的环境。
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
希望能帮助别人!
答案 1 :(得分:4)
好的,几个小时后我找到了解决方案:
用户root正在运行脚本,但未为此用户配置AWS。我只需要为root用户配置AWS:
# aws configure
答案 2 :(得分:2)
我一直在用谷歌挖掘这个问题几个小时,从crontab脚本运行AWS命令应该更容易。似乎没什么用。
我的剧本:
#!/bin/bash
backup_date=$(date +%y-%m-%d)
zip /opt/file.zip /opt/file.db
export AWS_ACCESS_KEY_ID=***********************
export AWS_SECRET_ACCESS_KEY=****************************************
export AWS_DEFAULT_REGION=us-east-1
/usr/bin/aws s3 cp /opt/file.zip s3://bucket/backup/$backup_date.file.zip
/usr/bin/aws s3 cp /opt/file.zip s3://bucket/backup/file.zip
rm -f /opt/file.zip
没有用的东西:
定义信誉: aws configure
将完整的脚本路径放入crontab: 0 22 * * * /opt/foo.sh& amp;>> /tmp/foo.log
玩弄:哪个
<强>答案:强>
我遇到了这个答案,只是把它放在crontab -e:
中0 0 * * * /usr/bin/env bash /opt/foo.sh &>> /tmp/foo.log
答案 3 :(得分:1)
您可以通过定义环境变量直接在脚本中定义凭据:
export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_DEFAULT_REGION=us-west-2
https://docs.aws.amazon.com/en_us/cli/latest/userguide/cli-configure-envvars.html
答案 4 :(得分:0)
您应该在
之前以root身份运行aws configure任务# aws configure
如果您以root用户身份运行crontab,请检查HOME目录...将其更改为
HOME=/root
在/ etc / crontab的开头或将/root/.aws复制到/.