linux - 用户数据脚本未在我的自定义 AMI 上运行,但在标准 Amazon linux 中运

这几天我搜索了很多关于“user-data script is not working”的话题,但是直到现在我还没有对我的情况有任何了解,请帮我弄清楚发生了什么,谢谢很多!

根据 AWS User-data解释:

When you launch an instance in Amazon EC2, you have the option of passing user data to the instance that can be used to perform common automated configuration tasks and even run scripts after the instance starts.

所以我尝试在实例启动时传递我自己的用户数据,这是我的用户数据:

\#!/bin/bash

echo 'test' > /home/ec2-user/user-script-output.txt

但是这个路径下没有文件:/home/ec2-user/user-script-output.txt

我检查了 /var/lib/cloud/instance/user-data.txt,该文件存在并且与我的用户数据脚本相同。

另外我检查了/var/log/cloud-init.log中的日志,没有错误信息。

但是如果我使用 Amazon linux(2014.09.01) 启动一个新实例,用户数据脚本就可以工作,但我不确定我的 AMI(基于 Amazon linux)和 Amazon linux 之间有什么区别。

我看到的唯一不同的部分是如果我运行这个脚本:

sudo yum list installed | grep cloud-init

我的 AMI:

cloud-init.noarch 0.7.2-8.33.amzn1 @amzn-main

亚马逊 Linux:

cloud-init.noarch 0.7.2-8.33.amzn1 installed

我不确定是不是这个原因?

如果您需要更多信息,我很乐意提供,请告诉我在我自己的 AMI 中发生了什么以及如何修复它?

非常感谢

更新

刚刚从这个 post 中找到了答案,

如果我在用户数据文件的顶部添加#cloud-boothook,它会起作用!

#cloud-boothook
#!/bin/bash
echo 'test' > /home/ec2-user/user-script-output.txt

但仍然不知道为什么。

最佳答案

User_data 仅在第一次启动时运行。由于您的图像是自定义图像,我想它已经启动过一次,因此 user_data 已停用。

对于 Windows,可以通过选中 Ec2 Services Properties 中的框来完成。 .我正在研究如何在自定义图像创建结束时以自动方式执行此操作。

对于linux,我想机制是一样的,需要在你的自定义镜像上重新激活user_data。

#cloud-boothook 使其工作,因为它将脚本从 user_data 机制更改为 cloud-boothook一个在每次启动时运行。


编辑:

这是使用 powershell 在 windows 上重新激活启动的代码:

$configFile = "C:\\Program Files\\Amazon\\Ec2ConfigService\\Settings\\Config.xml"
[xml] $xdoc = get-content $configFile
$xdoc.SelectNodes("//Plugin") |?{ $_.Name -eq "Ec2HandleUserData"} |%{ $_.State = "Enabled" }
$xdoc.SelectNodes("//Plugin") |?{ $_.Name -eq "Ec2SetComputerName"} |%{ $_.State = "Enabled" }
$xdoc.OuterXml | Out-File -Encoding UTF8 $configFile

$configFile = "C:\\Program Files\\Amazon\\Ec2ConfigService\\Settings\\BundleConfig.xml"
[xml] $xdoc = get-content $configFile
$xdoc.SelectNodes("//Property") |?{ $_.Name -eq "AutoSysprep"} |%{ $_.Value = "Yes" }
$xdoc.OuterXml | Out-File -Encoding UTF8 $configFile

(我知道问题集中在linux,但它可以帮助其他人......)

关于linux - 用户数据脚本未在我的自定义 AMI 上运行,但在标准 Amazon linux 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27086639/

相关文章:

linux - 在 mac 上通过 ssh 连接到 amazon aws linux 服务器

linux - 如何从 linux 命令行获取视频文件的分辨率(宽度和高度)?

linux - 如何获得linux中两个文件之间的差异(仅添加)

linux - 远程 Linux 服务器到远程 linux 服务器目录复制。如何?

linux - 如何将一个文本文件拆分为多个 *.txt 文件?

linux - 在 Unix 上计算每行/字段的字符出现次数

linux - 如何自动化 HTML 到 PDF 的转换?

linux - 如何使用 sed 提取子字符串

python - standard_init_linux.go :178: exec user pr

c++ - 如何在 GDB 中漂亮地打印 STL 容器?