Amazon ec2 如何手动运行cloudinit?

Amazon ec2 如何手动运行cloudinit?,amazon-ec2,cloud-init,Amazon Ec2,Cloud Init,我正在编写一个CloudFormation模板,并尝试调试模板中提供的用户数据脚本。如何手动运行cloud init,并使其执行与启动新实例时相同的操作?您可以这样运行它: /usr/bin/cloud-init -d init 这将使用初始模块运行cloud init设置。(d选项用于调试)如果要运行必须运行的所有模块: /usr/bin/cloud-init -d modules 请记住,第二次运行这些程序时,它不会有太大作用,因为它已经在启动时运行了。要强制在启动后运行,可以从命令行运

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

您可以这样运行它:

/usr/bin/cloud-init -d init
这将使用初始模块运行cloud init设置。(d选项用于调试)如果要运行必须运行的所有模块:

/usr/bin/cloud-init -d modules
请记住,第二次运行这些程序时,它不会有太大作用,因为它已经在启动时运行了。要强制在启动后运行,可以从命令行运行:

( cd /var/lib/cloud/ && sudo rm -rf * )
在较旧版本中,云初始化的等价物是:

/usr/bin/cloud-init start
您可能也会发现这个问题很有用,尽管它适用于较旧版本的cloud init:

cloud init的文档只提供了一些示例。但它没有解释命令行选项或每个模块,因此您必须在配置中使用不同的值来获得所需的结果。当然,您也可以查看代码。

在大多数Linux发行版(包括CentOS和Ubuntu)上,您可以使用systemctl重新启动cloud init服务:

systemctl restart cloud-init
然后检查日志的输出以查看结果:

journalctl -f -u cloud-init

Kudus到@Rico,而且,如果您想运行单个模块——无论是为了测试还是因为您的发行版在默认情况下没有启用模块(高精度!),您也可以

/usr/bin/cloud-init -d single -n <module-name>
[我知道这并不是对OP的真正回答,但当我想解决我的问题时,这个问题是最重要的结果之一,所以我想其他人可能会觉得这很有用]

,你可以简单地运行

rm -f /var/log/cloud-init.log \
&& rm -Rf /var/lib/cloud/* \
&& cloud-init -d init \
&& cloud-init -d modules --mode final
sudo cloud-init clean
并添加
--logs
以清除所有日志文件。
当你重新启动时,它会重做所有事情。是的,为什么?我得到了
云初始化:错误:无效选择:“开始”(从“查询”、“初始化”、“模块”、“单一”中选择)
看起来您有一个不同的版本。可能是最新的Ubuntu。运行:
cloud init init
不会
cloud init init
只运行
cloud\u init\u modules
中的模块,跳过其余的运行?它应该在cloud_init_模块中运行和初始化设置以及所有内容,但发生的情况是,当您第二次运行
cloud init init
时,它不像第一次启动机器那样运行(因为它已经运行)来强制它运行所有内容。解决方法是这样做:
(cd/var/lib/cloud/&&sudo rm-rf*)
从命令行。如果您想运行配置中的其他模块,也可以运行
cloud init-d modules
这可能比OP要求的“更好”?也就是说,cloud init不会执行您的删除操作,因此您的解决方案不会“执行相同的操作”是吗?如果你加上几句评论,那么一切都会很清楚!虽然上述解决方案没有重新运行失败的软件包下载和软件包安装(salt minion),但这个解决方案做到了。
sudo cloud-init clean