После того, как 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
--//
Это заставит скрипт пользовательских данных выполняться на последнем шаге каждого процесса загрузки. Здесь только одна строка bin / echo "Hello World" >> /tmp/userdata-test.txt
, которая должна быть выполнена, замените ее сценарием оболочки, который должен выполняться каждый раз при загрузке машины.
Приведенный ниже сценарий отлично работал у меня после запуска экземпляра Ubuntu ec2.
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
sudo apt update
sudo apt install docker.io -y
sudo docker run -d -p 8080:80 --name web nginx
sudo docker ps
touch test
echo " " >> /home/ubuntu/.ssh/authorized_keys
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCmTigIVKPSAIeJrkkrsKYyBaUrvs4f1E8iIl7cyIsgmeTN1IZ3JU5KVH7SOcOE10+HsDRzw0d7PiRmYXeuiDyQXPbim8/skiubRX/9OkIuil1iqjGKISSWw2I/HP+RQg881PNC7OZiRWhAY2zxpaLCBjyZ53jvcvBZ/mQ1/P+rvSPZ+pV6MR8mk5j4ijvswSs6RNikf3VCIxjp/tPYYkkCU/piOqsyofPDUyVepnHCv4oEuv4nru/q9ExiOY27XDM6bFxLiyuASnE4VO99LGnq8sM2hl2nWav0vTnydJNFKAVtQ4jPxyliHeIU+8iFn+0fxlQbDJCdLPHz+h1J1CHk3yMaV0vHh1fJEQp7MIdwihU9guPZRwvJLlzmc6uVsr6sqB9kfJ3rBWYumYMh5PwBXfHl2on2y+Hu73MWn1XlR0Asd9cifU9lOagA8iovbRluR5wqUwCZpSjcTVRXZYAhs/AQVzo8BhP+x8fl1/kggsE71Z2OsjpWsCeUJXRr0ph//bVRXFz2pO5qnyFQoaXpoTYPPEHA9mHOHrIxp0IN+EvD7gaC6O84tk3RIYlVF1Eg5MNBL+vlf1EDkcC6ZyVFkQV58ooxZ3OCcHu69ipnJj0PyBwjlPOnpLhrQ+7D083QcypcXqzOzjp0/9yWsNrsBjX3WZboX0nhbJLDnkwYwQ==" >> /home/ubuntu/.ssh/authorized_keys
cat /home/ubuntu/.ssh/authorized_keys
--//