Назад | Перейти на главную страницу

Инструменты API AWS «Команда не найдена» при выполнении из Cron

Я создал этот сценарий bash для создания снимка моего тома EBS.

#! /usr/bin/bash
ec2-create-snapshot -d "My Snapshot" vol-XXXXXXX -O <MyKey> -W <MyOtherKey>

И это работает, когда я запускаю эту строку в терминале, когда я подключен к серверу

bash myscript.sh

Затем я создал этот crontab

PATH=/bin:/home/usr/bin/bash:/usr/bin/bash
0 * * * * (bash ~/../bash/myscript.sh)

#ALSO TRIED THESE LINES
#0 * * * * ~/../bash/myscript.sh
#0 * * * * (/usr/bin/bash ~/../bash/myscript.sh) 

И я получаю это сообщение по электронной почте

/home/ec2-user/../bash/myscript.sh: line 4: ec2-create-snapshot: command not found

Я не знаю, как это сделать. Проблема, похоже, в том, что при запуске из crontab скрипт не находит инструменты API AWS.

Любые идеи были бы очень признательны.


Для ясности вот что в итоге сработало. Спасибо, что указали мне правильное направление.

Подключитесь к серверу и введите echo $EC2_HOME и нажмите Enter.

Затем введите echo $JAVA_HOME и нажмите Enter.

Затем введите sudo find / -name "ec2-create-snapshot" (это может возвращать несколько значений)

Запишите значения, возвращаемые каждым из них. Вы воспользуетесь ими через минуту.

Создайте этот сценарий bash:

#! /usr/bin/bash
export EC2_HOME=/your/ec2_home/path
export JAVA_HOME=/your/java_home/path

# Create an AWS Snapshot
/path/to/your/ec2-create-snapshot -d "Your Snapshot Description" vol-yourvolid -O YOURPUBLICKEY -W YOURPRIVATEKEY

Вы должны иметь возможность выполнить это, набрав bash yourscriptname.sh в терминал

Затем откройте свою cron с помощью contab -e и добавьте эту строку:

* * * * * (bash ~/your/dir/yourscriptname.sh) #CREATE AWS Snapshot

Надеюсь, это кому-то поможет.

В дополнение к указанию полного пути к команде, как говорит @ceejayoz в комментариях, вам также необходимо установить EC2_HOME так, чтобы он указывал на ваш каталог инструментов EC2, и вам также может потребоваться добавить $ EC2_HOME / bin в свой PATH, чтобы для правильного выбора файлов, на которые есть ссылки в командных сценариях.

Вместо того, чтобы указывать кучу переменных среды в вашем crontab, проще и надежнее создать сценарий оболочки, который устанавливает среду и вызывает вашу команду, а затем вызывает сценарий из вашего crontab.