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

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

19
задан 17 August 2016 в 22:47
4 ответа

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

23
ответ дан 2 December 2019 в 20:18

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

2
ответ дан 2 December 2019 в 20:18

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

0
ответ дан 2 December 2019 в 20:18

Приведенный ниже сценарий отлично работал у меня после запуска экземпляра 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 
--//

-1
ответ дан 26 October 2021 в 10:10

Теги

Похожие вопросы