Amazon-Ec2

如何讓 EC2 使用者數據腳本在啟動時再次執行?

  • October 26, 2021

在 cloud-init 在 EC2 實例的第一次啟動時執行使用者數據腳本後,可能會寫入一個狀態文件,以便 cloud-init 在後續重啟時不會再次執行該腳本。在某些情況下,我想刪除此狀態文件,以便再次執行使用者數據腳本。它在哪裡?

rm /var/lib/cloud/instances/*/sem/config_scripts_user

確認工作:

  • CentOS 7.4
  • Ubuntu 14.04
  • Ubuntu 16.04

為了完整起見,如果您有需要跟踪此 AMI 的事實/可能性的情況

$$ had a parent AMI that … $$他們都執行了cloud-init使用者數據,你只能刪除目前的信號量。 rm /var/lib/cloud/instance/sem/config_scripts_user

您還可以將使用者數據配置為在每次啟動時重新執行,而不是刪除狀態文件。您必須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,將其替換為每次啟動機器時都需要執行的 shell 腳本。

引用自:https://serverfault.com/questions/797482