这几天我search了很多关于“用户数据脚本不工作”的话题,但是到现在为止,我还没有了解我的情况,请帮我弄清楚发生了什么,非常感谢!
根据AWS 用户数据说明:
在Amazon EC2中启动实例时,可以select将用户数据传递给可用于执行常见自动化configuration任务的实例,甚至可以在实例启动后运行脚本。
所以我尝试在实例启动时传递我自己的用户数据,这是我的用户数据:
我在哪里可以放置除了没有pipe理权限的LOCALMACHINE -Registry以外的常用用户数据
Ubuntu AMI不加载用户数据
哪里可以放置普通用户数据而没有pipe理权限?
在Windows上loggingEC2实例上的用户数据脚本输出
EC2 Windows用户数据:Powershell无法正常运行
#!/斌/庆典
echo'test'> /home/ec2-user/user-script-output.txt
但是这个path中没有文件:/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安装了| 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已安装
我不确定这是什么原因?
如果您需要更多信息,我很乐意提供,请让我知道我自己的AMI发生了什么,以及如何解决?
非常感谢
更新
刚刚从这个postfind了答案,
如果我在用户数据文件的顶部添加#cloud-boothook,它可以工作!
#cloud-boothook #!/bin/bash echo 'test' > /home/ec2-user/user-script-output.txt
但仍然不知道为什么。
User_data只在第一次启动时运行。 由于你的图像是一个自定义的,我想它已经启动一次,所以user_data被取消激活。
对于Windows,可以通过在Ec2服务属性中选中一个框来完成。 我正在寻找如何在自定义图像创建结束时以自动化的方式做到这一点。
对于Linux,我想机制是相同的,并且user_data需要重新激活您的自定义图像。
#cloud-boothook使它可以工作,因为它将脚本从user_data机制更改为在每次启动时运行的cloud-boothook 。
编辑:
下面是使用PowerShell重新激活窗口的代码:
$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,但它可以帮助其他…)
正如我测试的那样, /var/lib/cloud目录中有一些引导数据。 在我清除该目录后, 用户数据脚本正常工作。
rm -rf /var/lib/cloud/*
我在Ubuntu 16.04 hmm AMI上也遇到同样的问题。 我已经提出这个问题给AWS的支持,但我仍然无法找到确切的原因/错误影响它。
但是我仍然有一些可以帮助你的东西。
在AMI去除/ var / lib / cloud目录之前(每次)。 然后在创建图像时,将其设置为不重新启动。
如果这些东西仍然不起作用,可以通过强制用户数据手动运行来进一步测试。 对于cloud-init状态,还需要tailf /var/log/cloud-init-output.log 。 它应该以模块的形式结束:最后让你的用户数据运行。 它不应该卡在模块:配置。
sudo rm -rf /var/lib/cloud/* sudo cloud-init init sudo cloud-init modules -m final
我不知道上面的命令是否可以在CentOS上运行。 我已经在Ubuntu上测试过了。
在我的情况下,我也尝试删除/ var / lib / cloud目录,但仍未能在我们的场景中执行用户数据。 但是我想出了不同的解决方案。 我们所做的就是用上面的命令创建了脚本,并使脚本在系统启动时运行。
我在/etc/rc.local的下面添加了一行来实现。
sudo bash /home/ubuntu/force-user-data.sh || exit 1
但是这里有个问题,它会在每次启动时执行脚本,这样就可以使用户数据在每一次启动时运行,就像#cloud-boothook一样。 不用担心,你可以通过在最后删除force-user-data.sh本身来调整它。 所以你的force-user-data.sh会看起来像
#!/bin/bash sudo rm -rf /var/lib/cloud/* sudo cloud-init init sudo cloud-init modules -m final sudo rm -f /home/ubuntu/force-user-data.sh exit 0
我将不胜感激,如果有人可以把一些灯为什么无法执行用户数据。
用户数据应该在不使用#cloud-boothook情况下执行正常(用于在启动过程中尽早激活用户数据)。
我开始了一个新的亚马逊Linux AMI,并使用您的用户数据,再加上一些额外的:
#!/bin/bash echo 'bar' > /tmp/bar echo 'test' > /home/ec2-user/user-script-output.txt echo 'foo' > /tmp/foo
这成功创建了三个文件。
用户数据脚本以root用户身份执行,因此应具有在任何位置创建文件的权限。
我注意到,在你提供的代码中,一个例子是指/home/ec2-user/user-script/output.txt (有一个子目录),一个例子是指/home/ec2-user/user-script-output.txt (没有子目录)。 如果你尝试在一个不存在的目录中创建一个文件,这个命令可能会失败,但是你的“Update”例子似乎表明它确实有效。
我使用的是CentOS,userdata的逻辑很简单:
在文件/etc/rc.local中有一个initial.sh脚本的调用,但它首先查找一个标志:
if [ -f /var/tmp/initial ]; then /var/tmp/initial.sh & fi
initial.sh是执行用户数据的文件,但最后删除标志。 因此,如果您希望新的AMI再次执行用户数据,只需在创建映像之前重新创建标志:
touch /var/tmp/initial
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。