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

Как снова запустить скрипт пользовательских данных EC2 при запуске?

После запуска cloud-init скрипт пользовательских данных при первой загрузке экземпляра EC2 файл состояния, вероятно, записывается так, чтобы cloud-init не запускал сценарий снова при последующих перезагрузках. Бывают случаи, когда я хотел бы удалить этот файл состояния, чтобы сценарий данных пользователя снова запустился. Где это находится?

rm /var/lib/cloud/instances/*/sem/config_scripts_user

Подтверждена работа над:

  • CentOS 7.4
  • Ubuntu 14.04
  • Ubuntu 16.04

Для полноты картины, если у вас есть ситуация, когда вы хотите отслеживать факт / возможность того, что этот AMI [имел родительский AMI, который ...] и все они выполнялись cloud-init данные пользователя, вы можете удалить только текущий семафор.

rm /var/lib/cloud/instance/sem/config_scripts_user

Вы можете поместить свой скрипт в /etc/rc.local, который будет запускать скрипт при каждой перезагрузке.

Вы также можете настроить свои пользовательские данные для повторного запуска при каждой загрузке вместо удаления файла состояния. Вы должны использовать cloud_final_modules в вашем скрипте userdata, чтобы повторно запустить скрипт userdata, и для этого вам нужно настроить uderdata, чтобы иметь несколько файлов в 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"

#!/bin/bash
/bin/echo "Hello World" >> /tmp/userdata-test.txt
--//

Это заставит скрипт userdata выполняться на последнем этапе каждого процесса загрузки. Здесь только одна строка bin/echo "Hello World" >> /tmp/userdata-test.txt для выполнения замените его сценарием оболочки, который должен выполняться каждый раз при загрузке машины.