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

时间:2017-08-28 14:07:39

标签: ruby chef chef-recipe chef-solo

我正在运行厨师配方块以停止在端口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

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

最好将其放在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