1

我正在阅读https://serverfault.com/questions/378520/chef-stop-and-start-service-in-sequence并想询问不同的程序。

第 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 是否已经启动。

如何在厨师上做到这一点?

4

1 回答 1

2

好的,我从 ruby​​_block 完成了这个

# for managing service
# jboss block until operational
ruby_block "block_until_operational" do
  block do
    until IO.popen("netstat -lnt").entries.select { |entry|
        entry.split[3] =~ /:#{node[:jboss][:default_port]}$/
      }.size == 1   
      Chef::Log.debug "service[jboss] not listening on port #{node[:jboss][:default_port]}"
      sleep 1
    end
  end
  action :nothing
end

我创建了这个 ruby​​ 块,它将监听端口 8080,直到它返回 1(启动)并通过调用它

service "jboss" do
    action :start
    notifies :create, 'ruby_block[block_until_operational]', :immediate
end
于 2013-10-23T04:03:25.343 回答