Mike Conigliaro Asked: 2016-08-18 11:47:31 +0800 CST2016-08-18 11:47:31 +0800 CST 2016-08-18 11:47:31 +0800 CST 如何让 EC2 用户数据脚本在启动时再次运行? 772 在 cloud-init 在 EC2 实例的第一次启动时运行用户数据脚本后,可能会写入一个状态文件,以便 cloud-init 在后续重启时不会再次运行该脚本。在某些情况下,我想删除此状态文件,以便再次运行用户数据脚本。它在哪里? amazon-ec2 cloud-init 4 个回答 Voted Best Answer Mike Conigliaro 2016-08-18T11:47:31+08:002016-08-18T11:47:31+08:00 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 Hardeep Singh 2019-02-13T23:51:08+08:002019-02-13T23:51:08+08:00 您还可以将用户数据配置为在每次启动时重新运行,而不是删除状态文件。您必须在用户数据脚本中使用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 --// 这将使 userdata 脚本在每个启动过程的最后一步执行。这里只执行一行bin/echo "Hello World" >> /tmp/userdata-test.txt,将其替换为每次启动机器时都需要执行的 shell 脚本。 Pratik Singhal 2017-02-24T08:22:15+08:002017-02-24T08:22:15+08:00 您可以将您的脚本放在 /etc/rc.local 中,这将在每次重新启动时运行该脚本。 devops-admin 2021-10-27T02:10:16+08:002021-10-27T02:10:16+08:00 在启动 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 --//
rm /var/lib/cloud/instances/*/sem/config_scripts_user
确认工作:
为了完整起见,如果您希望跟踪该 AMI [有一个父 AMI ......] 并且它们都运行
cloud-init
用户数据的事实/可能性,您可以仅删除当前信号量。rm /var/lib/cloud/instance/sem/config_scripts_user
您还可以将用户数据配置为在每次启动时重新运行,而不是删除状态文件。您必须在用户数据脚本中使用
cloud_final_modules
以重新运行用户数据脚本,为此您必须自定义 uderdata 以在用户数据中包含多个文件。示例用户数据文件如下:这将使 userdata 脚本在每个启动过程的最后一步执行。这里只执行一行
bin/echo "Hello World" >> /tmp/userdata-test.txt
,将其替换为每次启动机器时都需要执行的 shell 脚本。您可以将您的脚本放在 /etc/rc.local 中,这将在每次重新启动时运行该脚本。
在启动 ubuntu ec2 实例后,以下脚本对我来说非常有效。