EC2_HOME не установлен. Запускать команды AWS из Cron
По сути, я не уверен, как заставить мои команды 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
Я нахожусь на машине Amazon EC2 и могу запускать команды aws в пользовательской оболочке EC2. У меня просто проблемы с запуском команд из crontab.
Письмо, отправленное пользователю ec2, гласит: "/opt/aws/bin/ec2-start-instances: строка 9: EC2_HOME: EC2_HOME не установлен"
3 ответа
Это должно работать для вас... Необходимо настроить несколько систем с автоматическими сценариями cron git pull, которые затем выполняли бы сценарии bash crontab / anacron run-parts, которые вызывали инструменты ec2 java. Обычно в amz-linux-ami (их клон RH) создание env vars происходит следующим образом:
(собираюсь придерживаться соответствующих файлов)
Сделать оболочку логин -> 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 будут (лично я загружаю файлы key.conf, которые генерируются из git-репо, и каждый раз запускаю git час, так что ключи и кошка env обновляются так же, как и сами сценарии. Затем сценарий задания получает файл 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
Ура!
Во-первых, вам нужно перейти на новый интерфейс командной строки AWS.
Затем вы можете поместить свои ключи доступа и секретные ключи в ~/.aws/config, и у вас не будет проблем. Новые инструменты поддерживают несколько профилей и не зависят от переменных env.
Редактировать: Если ваша проблема просто установить env для заданий, запускаемых из cron, взгляните на:
Где я могу установить переменные окружения, которые будет использовать crontab?
Я нашел этот ответ на форуме разработчиков AWS, который работал на меня. Просто скопируйте его сюда, чтобы было легче добраться:
Вы можете источник
/opt/elasticbeanstalk/support/envvars
установить обычные переменные среды (RDS_HOSTNAME
так далее). Следующая запись cron работает для нас:
30 2 * * * root . /opt/elasticbeanstalk/support/envvars && php /var/www/bin/some_command.php