我有一个运行基于 Amazon Linux AMI 的 AMI 的 EC2 实例。与所有此类 AMI 一样,它支持云初始化 https://help.ubuntu.com/community/CloudInit用于根据传递到每个实例的用户数据运行启动脚本的系统。在这种特殊情况下,我的用户数据输入恰好是一个包含文件,该文件来源几个其他启动脚本:
#include
http://s3.amazonaws.com/path/to/script/1
http://s3.amazonaws.com/path/to/script/2
第一次启动实例时,cloud-init 启动脚本正确运行。但是,如果我对实例进行软重启(通过运行sudo shutdown -r now
,例如),实例恢复without第二次运行启动脚本。如果我进入系统日志,我可以看到:
Running cloud-init user-scripts
user-scripts already ran once-per-instance
[ OK ]
这不是我想要的——我可以看到启动脚本在每个实例生命周期中只运行一次的实用性,但在我的例子中,这些脚本应该在每次实例启动时运行,就像正常的启动脚本一样。
我意识到一种可能的解决方案是手动让我的脚本将其自身插入rc.local
第一次运行后。然而,这似乎很麻烦,因为 cloud-init 和 rc.d 环境略有不同,我现在必须在首次启动和所有后续启动时分别调试脚本。
有谁知道我如何告诉 cloud-init 始终运行我的脚本?这听起来确实像是 cloud-init 的设计者会考虑到的事情。
在 11.10、12.04 及更高版本中,您可以通过使“scripts-user”“始终”运行来实现此目的。
在 /etc/cloud/cloud.cfg 中,您会看到类似以下内容:
cloud_final_modules:
- rightscale_userdata
- scripts-per-once
- scripts-per-boot
- scripts-per-instance
- scripts-user
- keys-to-console
- phone-home
- final-message
这可以在启动后修改,或者可以通过用户数据插入覆盖此节的云配置数据。即,在用户数据中您可以提供:
#cloud-config
cloud_final_modules:
- rightscale_userdata
- scripts-per-once
- scripts-per-boot
- scripts-per-instance
- [scripts-user, always]
- keys-to-console
- phone-home
- final-message
正如您在描述中所做的那样,这也可以是“#included”。
不幸的是,现在您无法修改“cloud_final_modules”,而只能覆盖它。我希望在某个时候添加修改配置部分的功能。
云配置文档中有更多关于此的信息:https://github.com/canonical/cloud-init/tree/master/doc/examples https://github.com/canonical/cloud-init/tree/master/doc/examples
或者,您可以将文件放入 /var/lib/cloud/scripts/per-boot 中,它们将通过“scripts-per-boot”路径运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)