如何手动运行cloud-init?

时间:2014-04-18 09:38:13

标签: amazon-ec2 cloud-init

我正在编写CloudFormation模板,我正在尝试调试我在模板中提供的用户数据脚本。如何手动运行cloud-init并使其执行与启动新实例时相同的操作?

5 个答案:

答案 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)

As documentation,您只需运行

sudo cloud-init clean

并添加--logs以清除所有日志文件。 重新启动时,它将重做所有内容