amazon-web-services - EC2_HOME 未设置。从 Cron 运行 AWS 命令

标签 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 Amazon 机器上,我能够在 EC2-user shell 中运行 aws 命令。我只是在从 crontab 获取要运行的命令时遇到问题。

发送给 ec2 用户的邮件说“/opt/aws/bin/ec2-start-instances: line 9: EC2_HOME: EC2_HOME is not set”

最佳答案

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

(要坚持相关文件)

做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 运行分离脚本将是(我个人加载从 git repo 生成的 key.conf 文件,并且每个小时,所以键和 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

干杯!

关于amazon-web-services - EC2_HOME 未设置。从 Cron 运行 AWS 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21025971/

相关文章:

windows - Windows 上的每小时 cronjob

amazon-web-services - 如何在 Java 中使用 S3 VPC 端点?

javascript - 无法读取 AWS EC2 中未定义的属性(读取 'getusermedia' )

amazon-web-services - 尝试在 aws cloudformation CLI 中提示参数字段时遇到问题

php - 如何在 Godaddy 虚拟主机服务器中使用 cron 作业运行 Yii2 的控制台命令

docker services.web.working_dir 包含无效类型,它应该是一个字符串

ruby - 如何在 ruby​​ 中使用 openssl 生成 csr 和 crt 文件

php - 如何处理大量的 Cron 作业

Jboss,为应用程序设置环境变量

node.js - 如果我正在开发或生产中,如何告诉 firebase? (对于 firebase 函数沙箱/实时开关)