等到服务关闭完成,然后再转到厨师食谱中的下一个块

Wait until service shutdown complete before moving to next block in chef recipe

我正在 运行ning 厨师食谱块停止特定服务 运行ning 在端口 9991 上。这是我的厨师食谱块。

execute "run script" do
    command "./stop.sh"
    cwd "#{node[MY_ENVIRONMENT]['home']}"
    user "centos"
    action :run
    only_if { ::File.exist?("#{node[MY_ENVIRONMENT]['home']}/stop.sh") }
end

根据我的应用程序,通过断开已建立的 TCP 连接来关闭应用程序可能需要一些时间。我不知道要花多长时间。

我需要等待 chef-client 到 运行 下一个区块,直到我的服务完全停止。我可以通过执行以下命令确保服务已关闭,如果它从 bash.

得到 echo $?; -ne 结果
ss -a | grep -E '9991'  # reason for this is my application can have close_wait, fin_wait status within the shutdown process

谁能帮我解决这个问题?

最好将它放在 stop.sh 本身中。 Chef 将等到该脚本结束,因此无论它做什么都取决于您。否则,您可以使用 ruby_block 资源,但您需要一种获取程序 PID 的方法:

ruby_block 'wait until down' do
  block do
    begin
      loop do
        Process.kill(0, yourpid)
        sleep(1)
       end
    rescue Errno::ESRCH
      # This space left intentionally blank, when the PID is gone, we're done.
    end
  end
end