5

我有这个脚本:

#!/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 角色,这重要吗?

4

6 回答 6

12

以 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

希望对某人有所帮助!

于 2015-11-09T08:33:31.253 回答
5

好的,几个小时后我找到了解决方案:

用户 root 正在运行脚本,但没有为此用户配置 AWS。我只需要为用户根配置 AWS:

# aws configure
于 2014-09-01T20:30:07.953 回答
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 &>> /tmp/foo.log

玩弄:哪个aws

回答:

我遇到了这个答案,只需将其放在 crontab -e 中即可:

0 0 * * * /usr/bin/env bash /opt/foo.sh &>> /tmp/foo.log
于 2015-12-08T17:10:10.000 回答
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

于 2019-05-03T04:33:19.163 回答
0

您应该在之前以 root 身份运行 aws configure 任务

# aws configure

如果您以 root 身份运行 crontab,还要检查 HOME 目录...将其更改为

HOME=/root

在 /etc/crontab 的开头或将 /root/.aws 复制到 /。

于 2017-07-12T18:07:54.843 回答
0

当在 EC2 实例(Ubuntu 20.04)上使用 AWS 角色aws ...时,手动部署(无需 aws configure)时开箱即用,但作为 cron 脚本不成功。缺少的是一条路径,这是一个技巧:

/usr/local/bin/aws --version
于 2022-01-03T02:37:57.017 回答