AWS CLI无法在cron中运行

时间:2016-07-10 09:31:50

标签: shell ubuntu amazon-ec2 crontab aws-cli

我试图在Ubuntu 14.04.3 AWS EC2上的aws环境的cron中使用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:"

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

2 个答案:

答案 0 :(得分:1)

修复相对简单。从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二进制文件。

答案 1 :(得分:0)

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

我会保留这个问题,因为它列出了几个选项,可能对其他人有用。