厨师按顺序停止并开始服务,并想问不同的程序。
第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安装返回错误,因为jboss尚未启动。 但在第二轮中成功。 显然第3步不知道如果JBoss已经开始。
厨师如何做到这一点?
使用资源订阅来维护执行顺序。
使用retries来确保应用程序安装能够工作,并且可以在chef运行结束时通过subscribes :run, "service[jboss]", :delayed运行资源bash[install application] subscribes :run, "service[jboss]", :delayed
bash "install application" do code <<-EOF ant install EOF action :nothing retries 3 subscribes :run, "service[jboss]", :delayed end
偶然发现了这个问题,但是看起来像我和rundeck有类似的问题…是你的服务开始,但没有开始?
尝试testing这个
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
“`