我之前问过这关于初始化脚本的顺序的问题。事实证明,这不是我需要的解决方案(甚至可能不是要问的正确问题) - 这是幻影般的成功。
我的系统是一个 AWS EC2 实例,运行 upstart(init) 0.6.5 作为启动服务。
我的目标是创建一个 AMI,在启动时使用实例 ID 来配置将在启动期间启动的其他应用程序。这就是我希望发生的事情:
- 从 AMI 启动新实例,提供脚本作为 UserData
- UserData 脚本检查新服务器的实例 id,并使用该实例 id 修改其他应用程序的几个配置文件(我实际上只是将其用作标识符,没什么特别的)。
- 在 cloud-init 进程运行 UserData 并修改配置文件后,我的应用程序之一就会启动。
- 一旦第一个应用程序启动,多个应用程序(取决于第一个)将启动。
初始化文件的相关(我认为)启动顺序如下:
- S50cloud-init-本地
- S51cloud-init
- S52云配置
- S80my-app-that-needs-to-start-first-first 需要先启动的 S80my-app
- S81在第一个应用程序之后启动的应用程序
- S81在第一个应用程序之后启动的另一个应用程序
- S98cloud-最终版
通过一些日志记录,我最近才了解到,我的 UserData 功能似乎直到 S98cloud-final 才被执行(我之前认为它是在 S51cloud-init 中完成的)。我认为将 cloud-final 移到启动顺序的早期对我来说并不明智。
我可以通过 cloud-init 进程下载并配置我的所有应用程序,但我不想这样做 - 我想要一个预加载的 AMI(其中包含我的所有应用程序,已在 init 中配置)。
我曾考虑过将应用程序的启动放在 S99local 中,但它们是应该能够独立启动/关闭的应用程序,并且我需要用于后续重新启动的初始化脚本。
对此的最佳实践是什么,或者有什么好的建议吗?