1

我们正在尝试在远程机器上运行刀独奏烹饪命令。当我们在每台机器上按顺序执行命令时,它可以毫无问题地工作。我们尝试使用这样的Parallel gem 来并行化它:

Parallel.each(machines, in_threads => machines.size) do |machine|
   knife solo cook machine.user + ":" + machine.ip <options>
end

这样做,恰好首先运行的线程按预期执行。但是,其他线程不执行并停止并出现错误:“EADDRINUSE:地址已在使用中 - bind(2) for 127.0.0.1:8889”

我们在调用knife solo cook调查的同一个地方输入了一个 netstat 命令,发现第一个线程在 8889 端口上打开了一个 Listen 套接字。我们确实打开了任何套接字,也没有发现任何迹象表明刀或 Net:SSH(由刀使用)正在执行此操作。

有谁知道谁在打开这个套接字?或者是否有任何配置文件?

谢谢!

编辑:忘了提,我们knife solo prepare在打电话之前做同样的事情cook,效果很好。此外,远程机器都正确设置了厨师独奏。

4

2 回答 2

1

我用谷歌搜索knife chef 8889,发现了这个:http ://docs.opscode.com/config_rb_knife.html

看起来 chef-zero 正在启动,也许chef_zero[:enabled] false在您的配置文件中尝试是件好事?

于 2014-06-06T14:27:57.897 回答
0

同意 nick,您将不得不编写一种机制来侦听多个端口,或者根据需要生成端口。

您也可以参考 tomcat 的用例,我们可以生成多个 tomcat 实例用于多重构建,它使用某种机制来做到这一点。很好的用例来了解它。

于 2014-06-06T16:59:28.890 回答