AWS CLI 在 cron 中不起作用



我正在尝试在 Ubuntu 14.04.3 AWS EC2 上的 aws 环境中使用 aws cli cp 命令。

ec2-user 被称为 ubuntu,位于/home/ubuntu 中

我在/home/ubuntu/.aws/config 中有我的 aws 配置文件

[default]
output=json  
region=eu-central-1

我在/home/ubuntu/.aws/credentials 中有我的 aws 凭证文件

[default]
aws_access_key_id=******
aws_secret_access_key=******

我的 crontab 看起来像这样

* * * * * sh /home/ubuntu/test.sh

shell 脚本尝试将测试文件复制到 S3 是单行:

/usr/local/bin/aws s3 cp test.txt s3://<my-bucket>/test.txt >> /home/ubuntu/some-log-file.log

cron 每分钟运行一次脚本,但不会将任何内容复制到 S3 存储桶。

如果我在我的 shell 上手动运行脚本,它可以工作。

我试过(没有成功):

将正确的路径放在 aws 前面 (/usr/local/bin/aws)

将aws_access_key_id和aws_secret_access_key也放入 .aws/config 文件中。

将 aws env vars 放入 crontab 和/或 shell 脚本

AWS_DEFAULT_REGION=eu-central-1
AWS_ACCESS_KEY_ID=******
AWS_SECRET_ACCESS_KEY =******

在 crontab 和/或 shell 脚本中定义 HOME

HOME="/home/ubuntu"

将配置和凭据文件位置放入 crontab

AWS_CONFIG_FILE="/home/ubuntu/.aws/config"
AWS_CREDENTIAL_FILE="/home/ubuntu/.aws/credentials"

将 PATH 放到 crontab 和/或 shell 脚本

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:"

有人知道我可能做错了什么吗?

修复相对简单。从 cron 运行 AWS CLI 命令时,您需要设置用户环境变量。

在 cron 命令中使用 . $HOME/.profile;

例:

10 5 * * * . $HOME/.profile;  /var/www/rds-scripts/clonedb.sh

在 shell 脚本中设置$SHELL和$PATH变量。

export SHELL=/bin/bash
export PATH=/usr/local/sbain:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

通过这些更改,AWS CLI 能够加载用户凭证文件并找到 AWS CLI 二进制文件。

发现我忘记了测试的绝对路径.txt (/home/ubuntu/test.txt)

我将保留这个问题,因为它列出了几个选项,并且可能对其他人仍然有帮助。

相关内容

  • 没有找到相关文章

最新更新