我正在运行厨师配方块以停止在端口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
有人可以帮我吗?
答案 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