我正在尝试从 cloudformation::init 脚本启动自定义守护程序。/etc/init.d/myservice 功能齐全;如果我在 cfn-init 完成后登录,
sudo service myservice start
表现符合预期。
我能看到两种方法可以直接从 cloudformation 脚本启动它,但我似乎无法让其中任何一种方法工作:(1) 使用 cfn-init::services 结构 (2) 使用 cfn-init::command 手动启动脚本。
(1)这里是作为服务 config.json 的相关部分:
"Metadata": {
"AWS::CloudFormation::Init": {
"configSets": {
"ascending": [
"config5"
],
"default": [
"config5"
]
},
"config5": {
"services": {
"myservice": {
"enabled": "true",
"ensureRunning": "true"
}
}
}
}
}
会产生错误:
2015-04-16 06:24:25,541 [INFO] -----------------------Starting build-----------------------
2015-04-16 06:24:25,856 [INFO] Running configSets: ascending
2015-04-16 06:24:25,856 [INFO] Running configSet ascending
2015-04-16 06:24:49,942 [INFO] Running config config5
2015-04-16 06:24:49,942 [WARNING] Unsupported service manager: myservice
2015-04-16 06:24:49,945 [INFO] ConfigSets completed
2015-04-16 06:24:49,949 [INFO] -----------------------Build complete-----------------------
这不会产生正在运行的服务 - 它不会失败,只是从未启动。这里似乎有一个安装先决条件,但我找不到相关文档。Yum 安装的软件包(nginx、tomcat 等)启动时没有任何警告。
(2) 手动启动服务是可行的,因为服务会启动。但是,服务会以自己的用户身份运行,而 cfn 服务中似乎有些东西丢失了,因为配置中的这一步从未完成,从而阻止了任何其他配置集运行。在 config1 中安装 /opt 有点不相关,我将其包括在内是为了在日志中显示完成的命令是什么样子。因此,相关配置将是:
"Metadata": {
"AWS::CloudFormation::Init": {
"configSets": {
"ascending": [
"config1",
"config5"
],
"default": [
"config5"
]
},
"config1": {
"commands": {
"mount1": {
"command": "umount /dev/xvdc"
},
"mount2": {
"command": "mount /dev/xvdc /opt"
}
}
},
"config5": {
"commands": {
"first_launch": {
"command": "/etc/init.d/myservice start"
}
}
}
}
}
生成日志:
2015-04-16 06:24:25,541 [INFO] -----------------------Starting build-----------------------
2015-04-16 06:24:25,856 [INFO] Running configSets: ascending
2015-04-16 06:24:25,856 [INFO] Running configSet ascending
2015-04-16 06:24:25,860 [INFO] Running config config1
2015-04-16 06:24:25,876 [INFO] Command mount1 succeeded
2015-04-16 06:24:25,901 [INFO] Command mount2 succeeded
2015-04-16 06:24:49,942 [INFO] Running config config5
再次,从命令提示符开始,服务命令产生一个正在运行的服务和预期的输出:
bash-4.1$ sudo service myservice start
Starting MyService: STARTED MyService Thu Apr 16 06:58:27 EDT 2015
-bash-4.1$
cfn-init 寻求什么样的回报?
谢谢!
答案1
您的服务部分的语法不太正确,即
"services": {
"myservice": {
"enabled": "true",
"ensureRunning": "true"
}
}
如果你看一下文档http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-init.html#aws-resource-init-services它指出 ...
您可以使用 services 键来定义在启动实例时应启用或禁用哪些服务。在 Linux 系统上,使用 支持此键sysvinit
。在 Windows 系统上,使用windows
服务管理器 支持此键。
因为您正在运行 Linux 系统,所以您的"services"
部分应该是这样的......
"services": {
"sysvinit" : {
"myservice": {
"enabled": "true",
"ensureRunning": "true"
}
}
}
希望这能起到作用!