AWS CLI 在 cron 中不起作用
AWS CLI does not work in cron
我正在尝试在 Ubuntu 14.04.3 AWS EC2 上的 aws 环境的 cron 中使用 aws cli cp 命令。
ec2 用户名为 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 环境变量放入 crontab and/or shell 脚本
AWS_DEFAULT_REGION=eu-central-1
AWS_ACCESS_KEY_ID=******
AWS_SECRET_ACCESS_KEY =******
在 crontab 中定义 HOME and/or shell 脚本
HOME="/home/ubuntu"
将配置和凭证文件位置放入 crontab
AWS_CONFIG_FILE="/home/ubuntu/.aws/config"
AWS_CREDENTIAL_FILE="/home/ubuntu/.aws/credentials"
将 PATH 放入 crontab and/or shell 脚本
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:"
有人知道我可能做错了什么吗?
发现我忘记了 test.txt (/home/ubuntu/test.txt)
的绝对路径
我会保留这个问题,因为它列出了几个选项并且可能对其他人仍然有帮助。
修复相对简单。当 运行 来自 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 二进制文件。
我正在尝试在 Ubuntu 14.04.3 AWS EC2 上的 aws 环境的 cron 中使用 aws cli cp 命令。
ec2 用户名为 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 环境变量放入 crontab and/or shell 脚本
AWS_DEFAULT_REGION=eu-central-1
AWS_ACCESS_KEY_ID=******
AWS_SECRET_ACCESS_KEY =******
在 crontab 中定义 HOME and/or shell 脚本
HOME="/home/ubuntu"
将配置和凭证文件位置放入 crontab
AWS_CONFIG_FILE="/home/ubuntu/.aws/config"
AWS_CREDENTIAL_FILE="/home/ubuntu/.aws/credentials"
将 PATH 放入 crontab and/or shell 脚本
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:"
有人知道我可能做错了什么吗?
发现我忘记了 test.txt (/home/ubuntu/test.txt)
的绝对路径我会保留这个问题,因为它列出了几个选项并且可能对其他人仍然有帮助。
修复相对简单。当 运行 来自 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 二进制文件。