等到服务关闭完成,然后再转到厨师食谱中的下一个块
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
我正在 运行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