ai didi

ruby - 检查与 Chef 的联系

转载 作者:数据小太阳 更新时间:2023-10-29 08:39:13 24 4
gpt4 key购买 nike

我需要检查与 Chef 的关系。

我在努力。

execute "check_sayc" do
command "$comprobacionPuerto='nc -zw3 server port && echo 'opened'
|| echo 'closed'|grep 'opened' if [[ -z $comprobacionPuerto ]]
then Chef::Log.fatal 'connections refuse' else Chef::Log.info 'connections open' fi'"
end

但是

Mixlib::ShellOut::ShellCommandFailed: execute[check_sayc]
(cb_prueba_frontal_deploy_databag::default line 7) had an error:
Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received
'127'

这是怎么回事?

最佳答案

您在您的execute 中混合了 shell 代码和 Ruby 代码来做那些不能那样工作的事情。此外,您在 command 中混淆了引号。

我不太确定使用 nc 执行您在那里尝试的操作是否有意义,但使用纯 ruby​​ 可能更容易:

ruby_block "check sayc" do
block do
server = "www.google.com"
port = 80

begin
Timeout.timeout(5) do
Socket.tcp(server, port){}
end
Chef::Log.info 'connections open'
rescue
Chef::Log.fatal 'connections refused'
end
end
end

这应该与您尝试实现的目标相同,但避免了顺序问题以及如何将 shellout 的输出传输回 ruby​​ 以在 Chef 中处理的问题。

编辑:我将连接尝试包装到超时 block 中。这可能会泄漏半开套接字,直到它们稍后被垃圾收集。但我认为这在 Chef 上下文中是安全的。

关于ruby - 检查与 Chef 的联系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15021660/

24 4 0
文章推荐: ruby - 将 ruby​​ 数组排序为字母数字
文章推荐: ruby-on-rails - 初始化 Ruby 模块
文章推荐: ruby - 使用 Capybara 附加文件 - 元素当前不可见并且 > 因此可能无法与之交互
文章推荐: ruby - 在 Rails 3 中使用 Nokogiri 读取 XML 文件
数据小太阳
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
全站热门文章
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com