5

В основном я не уверен, как заставить мои aws-команды запускаться в crontab. Я знаю, что мне нужно дать crontab некоторые переменные среды, чтобы он мог запускать команды aws, но я не совсем знаю, как это сделать. Кто-нибудь мог это сделать раньше?EC2_HOME не установлен. Выполнять команды AWS от Cron

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, и я могу запускать команды aws в оболочке EC2-пользователя. У меня просто возникают проблемы с запуском команд из crontab.

Почта отправляется пользователю ec2 говорит "/ Opt/AWS/bin/ec2-запуск экземпляров: Строка 9: EC2_HOME: EC2_HOME не установлен"

ответ

8

Это должно работать для вас ... Требуется для установки нескольких систем с автоматизированным cron git pull scripts, которые затем исполняли скрипты baset для crontab/anacron, которые вызывали инструменты java ec2. Обычно в АМЗ-Linux-Ами (их клон RH) творящий из окр VARS идет следующим образом:

(собирается придерживаться соответствующих файлов)

Do логин оболочки ->source /etc/profile который будет цикл через/и т.д./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, будут (лично я загружаю файлы key.conf, которые генерируются с помощью git repo, и каждый раз сжимать 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 

Приветствия!

+0

oops обязательно экспортируйте эти vars: 'export AWS_ACCESS_KEY AWS_SECRET_KEY EC2_URL JAVA_HOME EC2_HOME EC2_URL PATH', если вы отправляете исходный маршрут, вероятно, разумно не выполнять экспорт туда. – jonretting

+0

Также измените оболочку в/etc/crontab 'SHELL =/bin/bash' и/или/etc/anacrontab' SHELL =/bin/bash' Я не доверяю shebangs, особенно когда cronie участвует. – jonretting

0

Во-первых, вы должны перейти на новую AWS CLI ,

Затем вы можете поместить ключи доступа и секретные ключи в ~/.aws/config, и у вас не будет проблем. Новые инструменты поддерживают несколько профилей и не полагаются на переменные env.

Edit: Если ваша проблема просто устанавливает окр для задания выполняются из хрон, посмотрите на:

Where can I set environment variables that crontab will use?

+1

Я на EC2 Amazon машине, и я смог запустить AWS команды в оболочке EC2 пользователя. У меня просто возникают проблемы с запуском команд из crontab. – goopcat

0

Я нашел this answer on the AWS Developer Forum, который работал для меня. Просто скопировал здесь, чтобы сделать его легче достичь:

Вы можете источник /opt/elasticbeanstalk/support/envvars установить обычные переменные окружения (RDS_HOSTNAME и т.д.).Следующая запись хрон работает для нас:

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

Смежные вопросы