После запуска cloud-init скрипт пользовательских данных при первой загрузке экземпляра EC2 файл состояния, вероятно, записывается так, чтобы cloud-init не запускал сценарий снова при последующих перезагрузках. Бывают случаи, когда я хотел бы удалить этот файл состояния, чтобы сценарий данных пользователя снова запустился. Где это находится?
rm /var/lib/cloud/instances/*/sem/config_scripts_user
Подтверждена работа над:
Для полноты картины, если у вас есть ситуация, когда вы хотите отслеживать факт / возможность того, что этот 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
для выполнения замените его сценарием оболочки, который должен выполняться каждый раз при загрузке машины.