我正在编写CloudFormation模板,我正在尝试调试我在模板中提供的用户数据脚本。如何手动运行cloud-init
并使其执行与启动新实例时相同的操作?
答案 0 :(得分:35)
您可以像这样运行:
/usr/bin/cloud-init -d init
这将使用初始模块运行云初始化设置。 (-d选项用于调试)如果要运行所有必须运行的模块:
/usr/bin/cloud-init -d modules
请记住,第二次运行它们并没有做太多事情,因为它已经在启动时运行了。要在引导时间后强制运行,可以从命令行运行:
( cd /var/lib/cloud/ && sudo rm -rf * )
在旧版本中,等效于cloud-init init
的是:
/usr/bin/cloud-init start
您可能会发现这个问题很有用,尽管它适用于旧版本的cloud-init:How do I make cloud-init startup scripts run every time my EC2 instance boots?
cloud init here的文档仅为您提供示例。但它并没有解释命令行选项或每个模块,因此您必须在配置中使用不同的值来获得所需的结果。当然你也可以查看代码。
答案 1 :(得分:4)
在大多数Linux发行版(包括CentOS和Ubuntu)上,您可以使用systemctl重新启动cloud-init服务:
systemctl restart cloud-init
然后检查日记的输出以查看结果:
journalctl -f -u cloud-init
答案 2 :(得分:3)
Kudus到@Rico,而且,如果你想运行一个模块 - 要么进行测试,要么因为你的发行版默认没有启用模块(嗨精确!),你可以
/usr/bin/cloud-init -d single -n <module-name>
例如,当我的发行版默认不运行write_files
时(就像许多旧的发行版一样),我在runcmd的顶部使用它:
runcmd:
- /usr/bin/cloud-init -d single -n write-files
[我知道它不是OP的答案,但是当我想解决我的问题时,这个问题是最重要的结果之一,所以我认为其他人可能会觉得这很有用]
答案 3 :(得分:2)
rm -f /var/log/cloud-init.log \
&& rm -Rf /var/lib/cloud/* \
&& cloud-init -d init \
&& cloud-init -d modules --mode final
答案 4 :(得分:2)