我们正在尝试在远程计算机上运行“刀独奏”命令。当我们在每台计算机上依次执行命令时,它不会打ic。
我们试图通过使用Parallel gem来并行化它,如下所示:
Parallel.each(machines, in_threads => machines.size) do |machine|
knife solo cook machine.user + ":" + machine.ip <options>
end
这样做,恰好首先运行的线程将按预期执行。但是,其他线程不会执行并因错误而停止:“EADDRINUSE:地址已在使用中-127.0.0.1:8889的bind(2)”我们在调用
knife solo cook
进行调查的位置处放置了一个netstat命令,发现第一个线程已在端口8889上打开了一个监听套接字。我们确实打开了任何套接字,也没有发现任何迹象表明knife或Net:SSH(由knife使用)正在执行此操作。
有谁知道谁在打开这个 socket ?还是是否有任何配置文件?
谢谢!
编辑:忘了提一下,在调用
knife solo prepare
之前,我们对cook
进行了同样的操作,效果很好。另外,所有远程机器都已正确设置了厨师独奏。
最佳答案
同意nick,您将必须编写一种机制来监听多个端口,或者根据需要生成端口。
您也可以引用tomcat的用例,我们可以为multipe构建生成tomcat的多个实例,它使用某种机制来做到这一点。一个很好的用例来了解它。
关于ruby - 为什么使用Parallel gem运行 “knife solo cook”会给出端口错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24083204/