EC2_HOME未设置。从Cron运行AWS命令

时间:2014-01-09 16:36:06

标签: amazon-web-services cron environment-variables crontab ec2-api-tools

基本上我不知道如何让我的aws命令在crontab中运行。我知道我需要给crontab一些环境变量,以便它可以运行aws命令但是,我不知道该怎么做。有没有人能够做到这一点?

PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/bin:/opt/aws/bin
* * * * * export EC2_HOME=/opt/aws/apitools/ec2
* * * * * export JAVA_HOME=/usr/lib/jvm/jre
0 8 * * 1-5 ec2-start-instances instance_id
0 7 * * 1-5 ec2-start-instances instance_id
0 7 * * 1-5 ec2-start-instances instance_id

我在EC2亚马逊机器上,我可以在EC2用户shell中运行aws命令。我只是无法从crontab运行命令。

发送给ec2用户的邮件说“/ opt / aws / bin / ec2-start-instances:第9行:EC2_HOME:未设置EC2_HOME”

3 个答案:

答案 0 :(得分:8)

这应该对你有用...需要设置一些带有自动cron git pull脚本的系统,然后执行crontab / anacron run-parts bash脚本,这些脚本调用了ec2 java工具。通常在amz-linux-ami(他们的RH克隆)中,创建env变量如下:

(坚持相关文件)

执行shell登录 - > source /etc/profile将在这种情况下循环遍历/etc/profile.d和source *.{users shell extension} aws-apitools-common.sh

$cat aws-apitools-common.sh 
 export AWS_PATH=/opt/aws
 export PATH=$PATH:$AWS_PATH/bin
 #Prefer JDK if present (i pulled the condition to de-clutter this info)
 export JAVA_HOME=/usr/lib/jvm/java
 export JAVA_HOME=/usr/lib/jvm/jre

以下是相关行:

for aws_product in $(find /opt/aws/apitools /opt/aws/amitools -maxdepth 1 -type l 2>/dev/null); do
[ -e $aws_product/environment.sh ] && source $aws_product/environment.sh; done

因此脚本aws-apitools-common.sh搜索apitools和amitools,然后使用这些工具$aws_product/environment.sh。例如:source /opt/aws/apitools/ec2/environment.sh

现在这可能就是你要找的东西( /opt/aws/apitools/ec2/environment.sh ):

$cat environment.sh
# Set EC2_HOME.  Called from /etc/profile.d/aws-product-common
[ -z "$EC2_HOME" ] && EC2_HOME="/opt/aws/apitools/ec2"
export EC2_HOME

简而言之,您希望在crontab脚本中设置/导出的环境变量,或者您的anacron run-parted脚本将是(我个人加载到从git仓库生成的key.conf文件中,并且具有git pull每小时关闭一次,所以键和env cat就像脚本本身一样更新。然后作业脚本来源conf文件):

AWS_ACCESS_KEY="blah-blah-dingle-smith"
AWS_SECRET_KEY="yankee-doodle-shit-no-stank"
JAVA_HOME="/usr/lib/jvm/java"
EC2_HOME="/opt/aws/apitools/ec2"
EC2_URL="https://us-west-2.ec2.amazonaws.com/"
PATH="$PATH:/opt/aws/bin"  # is dir contains a symlinks of tool binaries

干杯!

答案 1 :(得分:0)

首先,您应该升级到新的AWS CLI。

然后你可以将你的访问密钥和密钥放入〜/ .aws / config,你就不会有问题。新工具支持多个配置文件,不依赖于env变量。

编辑:如果您的问题只是设置从cron运行的作业的env,请查看:

Where can I set environment variables that crontab will use?

答案 2 :(得分:0)

我发现this answer on the AWS Developer Forum对我有用。只需将其复制到此处即可轻松覆盖:

  

您可以提供/opt/elasticbeanstalk/support/envvars来设置常用的环境变量(RDS_HOSTNAME等)。以下cron条目适用于我们:

     

30 2 * * * root . /opt/elasticbeanstalk/support/envvars && php /var/www/bin/some_command.php