Chef 按顺序停止和启动服务并想询问不同的程序。
步骤 1:框架引导至 jboss 服务
bash "bootstrap application" do
code <<-EOF
ant bootstrap
EOF
end
第 2 步:然后启动 jboss
service "jboss" do
action :start
end
步骤 3:安装应用程序
bash "install application" do
code <<-EOF
ant install
EOF
end
在步骤2和步骤3之间,ant install 返回错误,因为jboss尚未启动。但第二次运行时成功。显然步骤3不知道jboss是否已经启动。
如何在厨师上做到这一点?
答案1
偶然发现了这个问题,但它看起来像是我在使用 rundeck 时遇到的类似问题...你的服务是否正在启动但尚未启动?
尝试测试一下
service "jboss" do
start_command 'service jboss start && sleep 30'
action :start
end
对于 rundeck,我在重启时遇到了问题,并使用 curl 来探测它直到它启动为止。
service 'rundeckd' do
restart_command 'service rundeckd restart && RETRIES=0 && until curl localhost:4440 || [ $RETRIES -eq 30 ]; do (( RETRIES++ )); sleep 5; done'
action :start
end
```
答案2
使用资源订阅维持执行秩序。
用于retries
确保应用程序安装成功,并且您可以bash[install application]
在 chef 运行结束时通过以下方式运行资源subscribes :run, "service[jboss]", :delayed
bash "install application" do
code <<-EOF
ant install
EOF
action :nothing
retries 3
subscribes :run, "service[jboss]", :delayed
end