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

Запустите сценарий bash после загрузки экземпляра EC2

У меня есть сценарий на экземпляре EC2, который удаленно запускает другой экземпляр.

Как только этот экземпляр будет полностью загружен (завершена загрузка), я хочу, чтобы он автоматически запускал скрипт bash, как лучше всего это сделать?

Мне нужно, чтобы все было полностью запущено, в основном сценарий bash запускает сценарий преобразования изображений (используя ImageMagick и несколько раз выполняет команду "wget")

В настоящее время скрипт находится здесь:

/home/root/beginProcess.sh

И я могу запустить его вручную, выполнив

bash beginProcess.sh

RHEL-6.2-Стартер-EBS-i386

Также к нему прилагается том EBS, если это поможет, спасибо!

Я бы предложил просто использовать данные пользователя возможность ec2-run-instances. Он позволяет вам передать какой-то сценарий виртуальной машине, который будет запускаться при первой загрузке. Если вы используете ubuntu или debian, вы можете использовать cloud-init, что придает процессу приятный оттенок. Если вы используете cloud-init, вы можете использовать [runcmd] раздел конфигурационного файла, чтобы указать произвольные команды для запуска после загрузки.

Спасибо пользователю SF Эрик Хэммонд для страницы пользовательских данных. Проверьте его сайт - он содержит обширную информацию об AWS.

Изменить: после повторного чтения неясно, хотите ли вы запускать команду при начальной загрузке или при каждой загрузке. Приведенные выше инструкции применимы только к начальной загрузке. Если вы хотите запускать команду при каждой загрузке, у вас есть несколько вариантов - вы можете запустить команду через @reboot cron, или вы можете добавить скрипт в /etc/rc.local, который будет запускаться каждый раз при загрузке системы.

Если вы использовали AMI с cloud-init установленный пакет (например, Amazon Linux или Ubuntu), вы можете просто передать сценарий bash (который начинается с #!) в качестве файла данных пользователя, и он будет запускаться автоматически в конце процесса загрузки.

Например, это может быть очень просто:

ec2-run-instances                             \
  --user-data-file /home/root/beginProcess.sh \
  --key $USER                                 \
  ami-XXXXXXXX

Вот статья, в которой я представил концепцию сценария пользовательских данных, которая теперь доступна в основных AMI EC2, таких как Amazon Linux и Ubuntu: http://alestic.com/2009/06/ec2-user-data-scripts

К сожалению, похоже, что вы хотите использовать RHEL AMI. Я запустил его копию и не смог найти ни одной ссылки на cloud-init или запуск сценариев пользовательских данных при первой загрузке, а также не тестировал ту же работу.

Я не говорю, что вам следует переключать дистрибутив Linux только для этого, но Amazon Linux основан на RHEL, так что это может сработать для вас.

Вот статья, которую я написал, которая может помочь вам отладить ваш скрипт пользовательских данных, если он не сработает с первого раза: http://alestic.com/2010/12/ec2-user-data-output

Авторитетный источник информации о том, как использовать EC2 UserData для запуска скрипта. каждый раз ваш экземпляр сапоги Вот. Короче говоря, я создаю сценарий на экземпляре (убедитесь, что он исполняемый), а затем использую следующий сценарий userdata:

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

/path/to/script.sh
--//

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

Еще одна хитрость, которую я обнаружил, заключается в том, что если вы уже игрались с этим и имели Другой Скрипт UserData на экземпляре, он кэшируется на машине и не обновляется при изменении сценария UserData. Чтобы заставить новый скрипт UserData действительно использоваться, вам нужно запустить cloud-init clean на экземпляре, чтобы очистить кеш UserData.

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

Типичный ответ - использовать данные пользователя EC2, но, похоже, это не работает для меня. Либо это потому, что данные пользователя предназначены только для запуска команд на Вновь созданный экземпляры (например, экземпляры начальной загрузки для масштабирования) или потому, что документация устарела. Не уверен, что именно, но мне не удалось заставить что-нибудь работать. Очевидно, есть какой-то метод для запуска команд каждый раз, когда существующий экземпляр начинается здесь: Как снова запустить скрипт пользовательских данных EC2 при запуске?, но у меня это просто не работает. Ничего не произошло.

После некоторого времени я сделал снимок в темноте и просто изменил файл .bashrc на моем экземпляре EC2, и вот, он работает точно так, как ожидалось, и запускает мои команды при запуске экземпляра. Это почти слишком очевидно, но немного примечательно, что нигде не упоминается.