简短版本:
如何在cloud-init在EC2上运行userdata
脚本后运行init.d脚本?
长版:
我们的部署过程是构建AMI,其上安装了所有内容(tomcat,nginx,应用程序等),但错过了某些配置值。在引导时,userdata脚本会添加缺少的配置值,然后应用程序堆栈可以启动
我们目前的EC2基于官方Debian AMI的旧版本,其中包含脚本ec2-run-user-data
。此脚本在引导时运行,并下载并运行EC2s用户数据。构建AMI时,我只需编辑tomcat,nginx等的init.d脚本,将ec2-run-user-data包含在" Required-Start:" line,所以他们在userdata运行后启动。
不幸的是,这种方法不再可行,因为我们希望开始使用hvm基础AMI,它安装了cloud-init而不是ec2-run-user-data。但我无法弄清楚cloud-init如何运作良好,以确定如何使该过程发挥作用。
据我所知,userdata脚本是由cloud-final步骤运行的,但是cloud-final有$ all in all" Required-Start:"线。我可以删除它,但我不知道可能会产生什么后果。
我已经尝试过在cloud-init或cloud-config之后运行tomcat等,但是用户数据还没有运行。此外,它看起来像cloud-init和cloud-config启动进程然后退出,这可以解释为什么cloud-final需要在Required-Start中有$ all
更多信息:
<<REPLACE_THIS>>
。如果Tomcat尝试在替换<<REPLACE_TIME>>
之前运行,则Tomcat将无法启动#!/bin/bash
sed -i 's!<<REPLACE_TIME>>!{New value to use, determined at deploy time}!' /etc/appname/application.conf
通过这样做,/ etc /appname / application.conf中的文本在tomcat运行之前被替换。但正如我上面所说,我想改为使用cloud-init,我无法弄清楚在cloud-init运行userdata之后我需要做些什么才能让tomcat启动。我得到的印象是,cloud-init在此过程中很晚才运行用户数据。我可以更改userdata脚本以包含&#34; /etc/init.d/tomcat restart&#34;最后,但是让tomcat无法启动然后重新启动似乎有点蠢。