我们正试图在远程机器上运行刀独奏烹饪命令。当我们按顺序在每台机器上执行命令时,它可以毫无打扰地工作。 我们尝试使用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
做了同样的事情并且效果很好。
此外,远程机器都正确设置了厨师独奏。
答案 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实例,它使用一些机制来做它。了解它的好用例。