我想通过xmlrpc与supervisor
交谈。基于supervisorctl
(尤其是this line),我有以下的,这似乎像它应该工作,实际上它的工作原理,在目前为止,因为它连接足以从服务器收到一条错误:通过xmlrpc与supervisord交谈
#socketpath is the full path to the socket, which exists
# None and None are the default username and password in the supervisorctl options
In [12]: proxy = xmlrpclib.ServerProxy('http://127.0.0.1', transport=supervisor.xmlrpc.SupervisorTransport(None, None, serverurl='unix://'+socketpath))
In [13]: proxy.supervisor.getState()
在由此产生错误:
---------------------------------------------------------------------------
ProtocolError Traceback (most recent call last)
/home/marcintustin/webapps/django/oneclickcosvirt/oneclickcos/<ipython-input-13-646258924bc2> in <module>()
----> 1 proxy.supervisor.getState()
/usr/local/lib/python2.7/xmlrpclib.pyc in __call__(self, *args)
1222 return _Method(self.__send, "%s.%s" % (self.__name, name))
1223 def __call__(self, *args):
-> 1224 return self.__send(self.__name, args)
1225
1226 ##
/usr/local/lib/python2.7/xmlrpclib.pyc in __request(self, methodname, params)
1576 self.__handler,
1577 request,
-> 1578 verbose=self.__verbose
1579 )
1580
/home/marcintustin/webapps/django/oneclickcosvirt/lib/python2.7/site-packages/supervisor/xmlrpc.pyc in request(self, host, handler, request_body, verbose)
469 r.status,
470 r.reason,
--> 471 '')
472 data = r.read()
473 p, u = self.getparser()
ProtocolError: <ProtocolError for 127.0.0.1/RPC2: 401 Unauthorized>
这是supervisord.conf
的unix_http_server
部分:
[unix_http_server]
file=/home/marcintustin/webapps/django/oneclickcosvirt/tmp/supervisor.sock ; (the path to the socket file)
;chmod=0700 ; socket file mode (default 0700)
;chown=nobody:nogroup ; socket file uid:gid owner
;username=user ; (default is no username (open server))
;password=123 ; (default is no password (open server))
所以,应该有没有认证问题。
看起来好像我的代码在所有重要方面与supervisorctl
的等效代码相同,但supervisorctl
实际上有效。我究竟做错了什么?
套接字只在文件系统上出现后,我添加了'unix_http_server'节到那个文件,所以是的,我相当确定。我将调试调试模式。 – Marcin 2012-07-31 16:45:58
连接在调试模式下不显示。我正在使用django-supervisor,通过它我可以运行supervisorctl,其连接也不会显示出来。不知道这是怎么回事。我相当肯定,这是使用套接字,因为当我将套接字添加到配置而不重新启动supervisor时,它不会连接。 – Marcin 2012-07-31 17:00:06
好吧,出于某种原因,如果我明确设置了用户名和密码,它就可以工作。我猜想在幕后django-supervisor会执行一些无益的魔法。我也有一个相关的问题在这里:http://stackoverflow.com/questions/11729159/use-python-xmlrpclib-with-unix-domain-sockets如果你关心回答它,我也会接受。如果不是,我会添加我自己的答案。 – Marcin 2012-07-31 17:13:37