나는 xmlrpc를 통해 supervisor
과 이야기하려고합니다. supervisorctl
(특히 this line)을 바탕으로, 나는 그것이 작동합니다 것 같아 다음을 가지고 있고,이 서버에서 오류가 발생하기에 충분한 연결로 실제로는 지금까지의 작품 :xmlrpc를 통해 감독관에게 말하기
#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()
이 결과 오류 :
[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))
그래서, 거기가 수행해야합니다
---------------------------------------------------------------------------
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
섹션 인증에 문제가 없다.
내 코드는 supervisorctl
의 코드와 완전히 동일한 것으로 보이지만 supervisorctl
실제로 작동합니다. 내가 도대체 뭘 잘못하고있는 겁니까?
'unix_http_server' 섹션을 파일에 추가 한 후에 소켓이 파일 시스템에만 나타 났으므로 확실합니다. 나는 디버그 모드로 바이올린을 잡을 것이다. – Marcin
연결이 디버그 모드로 표시되지 않습니다. 나는 장고 관리자를 사용하고 있는데,이를 통해 supervisorctl을 실행할 수 있으며, 연결도 나타나지 않습니다. 그게 뭔지 잘 모르겠다. 소켓을 사용하고 있다는 것이 확실합니다. 관리자를 다시 시작하지 않고 구성에 소켓을 추가하면 연결되지 않기 때문입니다. – Marcin
사용자 이름과 암호를 명시 적으로 설정하면 어떤 이유로 작동합니다. 장담 할 수없는 마술은 장고 감독관이 수행 한 것 같습니다. 나는 또한 여기에 관련된 질문이 있습니다 : http://stackoverflow.com/questions/11729159/use-python-xmlrpclib-with-unix-domain-sockets 만약 당신이 그것에 관심을 돌보면, 나는 또한 그것을 받아 들일 것입니다. 그렇지 않다면 나는 내 대답을 추가 할 것이다. – Marcin