我正在使用 Mcollective 2.2.x,并根据教程编写了一个代理。
名为'hello'的代理有一个名为'speak'的动作,在'speak'动作中,它通过XML-RPC调用python方法,代码如下:
Mcollective 的 Ruby 代理 <--
require "xmlrpc/client"
module MCollective
module Agent
class Hello<RPC::Agent
# Basic system inventory, same as the basic discovery agent
action "speak" do
server = XMLRPC::Client.new('localhost', nil, 8888)
s = server.call('testls', request[:msg])
reply[:resultmsg] = s
end
end
end
end
-->
Python XML-RPC 代码:
<--
from SimpleXMLRPCServer import SimpleXMLRPCServer
def testls(msg):
print(msg)
return msg
server = SimpleXMLRPCServer(('localhost',8888))
server.register_function(testls)
try:
server.serve_forever()
finally:
server.server_close()
-->
这是我的问题,在 mcollective 运行的情况下,我使用以下命令调用 hello 代理:
mco rpc hello speak msg='hello' -v
然后,Mcollective 进程因错误“堆栈级别太深”而崩溃,错误位置是“$mcollective_path/lib/mcollective/agents.rb”第 132 行,代码为“yield(replies) #这是一切崩溃的地方”
但是如果我第一次运行这个命令:
mco rpc hello speak msg='hello' -v --nr
"(没有处理结果,只有一次)
然后 mco rpc hello speak msg='hello' -v`
现在一切正常,永远不会发生错误
我不知道为什么会这样,这让我发疯
如果有人可以提供帮助,将不胜感激!