如何使用主管控制和监控远程主机中的进程?

时间:2016-08-04 13:26:57

标签: supervisord

Supervisor文件提及remote command line

  

主管为您提供一个启动,停止和监控的地方   你的过程。流程可以单独控制,也可以成组控制。   您可以将Supervisor配置为提供本地或远程命令行   和网络界面。

这是否意味着supervisor可以控制和监控远程主机上运行的进程?

例如,

  1. 有三台服务器ABC
  2. 服务器A运行主管。
  3. 主管在BC
  4. 中运行流程
  5. 主管可以监控和控制(停止和启动)BC中的流程。
  6. 如果可能的话,你能否为此给我一个Supervisor配置示例?

3 个答案:

答案 0 :(得分:1)

您不能仅使用管理程序来管理远程主机的进程。

但是您可以在每台主机上安装超级用户,并使用官方的supervisor XML-RPC API在控制主机上进行管理。

许多插件都是以这种方式实现的。

答案 1 :(得分:0)

报价的含义并非100%明确。恕我直言,这意味着控制可以远程或本地发生。

无论如何,发现这部分主管文档非常有帮助。 http://supervisord.org/plugins.html

它提到的工具可以帮助您从单一来源控制多台机器上的主管。

答案 2 :(得分:0)

使用xml-rpc

import socket
from http.client import HTTPConnection
from xmlrpc import client


class UnixStreamHTTPConnection(HTTPConnection):
    def connect(self):
        self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
        self.sock.connect(self.host)


class UnixStreamTransport(client.Transport, object):
    def __init__(self, socket_path):
        self.socket_path = socket_path
        super(UnixStreamTransport, self).__init__()

    def make_connection(self, host):
        return UnixStreamHTTPConnection(self.socket_path)


server = client.ServerProxy('http://127.0.0.1',transport=UnixStreamTransport("/path/to/supervisor.sock"))
print(proxy.supervisor.getState())
server.supervisor.stopProcess("test")
server.supervisor.startProcess("test")