在 cloud-init 运行用户数据脚本在 EC2 实例首次启动时,大概会写入一个状态文件,以便 cloud-init 在后续重新启动时不会再次运行该脚本。有些情况下,我想删除此状态文件,以便再次运行用户数据脚本。它在哪里?
答案1
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
答案2
您还可以将用户数据配置为在每次启动时重新运行,而不是删除状态文件。您必须cloud_final_modules
在用户数据脚本中使用它来重新运行用户数据脚本,为此您必须自定义 uderdata 以在用户数据中包含多个文件。示例用户数据文件如下:
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
要执行,将其替换为每次启动机器时都需要执行的 shell 脚本。
答案3
您可以将脚本放在 /etc/rc.local 中,它将在每次重启时运行该脚本。
答案4
在启动 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
--//