为什么使用Parallel gem运行“knife solo cook”会出现端口错误?

时间:2014-06-06 13:34:56

标签: ruby sockets parallel-processing chef knife-solo

我们正试图在远程机器上运行刀独奏烹饪命令。当我们按顺序在每台机器上执行命令时,它可以毫无打扰地工作。 我们尝试使用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套接字。 我们确实打开了任何插座,也没有发现任何迹象表明刀或网:SSH(由刀使用)正在这样做。

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

谢谢!

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

你也可以参考tomcat的用例,我们可以为多重构建产生多个tomcat实例,它使用一些机制来做它。了解它的好用例。