我试图在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:"
有人知道我可能做错了吗?
答案 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)
我会保留这个问题,因为它列出了几个选项,可能对其他人有用。