简介
Supervisor is a client/server system that allows its users to control a number of processes on UNIX-like operating systems.
当前最新版本为 4.2.4,发布于 2021-12-30
第一个发布版本为 1.0.3,发布于 2004-05-26
主要模块
supervisorctl
supervisorctl 是个命令行客户端,用户可以通过命令行输入指令来获取和变更进程状态等
命令列表
|
|
主流程
|
|
supervisord
主流程
|
|
子进程实例
|
|
http_server
支持基于 tcp socket 或者 unix domain socket 的 http server
|
|
xmlrpc_interface
xmlrpc协议简介
xmlrpc 是一种基于 http 通信、使用 XML 格式序列化的远程过程调用方式
请求示例
|
|
正常响应示例
|
|
错误响应示例 (同样返回 http code 200 )
|
|
supervisor中的实现
服务端 handler 实现
|
|
接口实现
|
|
event
event 类型
- SUPERVISOR_STATE_CHANGE: supervisord 状态相关
- PROCESS_STATE: 子进程进程状态相关
- PROCESS_GROUP: 进程组相关
- TICK: 心跳相关
订阅实现逻辑
|
|
eventlistener
eventlistener 是一种特殊的子进程,通过标准输入输出和 supervisord 来获取 event
- 向 stdout 写入
READY\n
向 supervisord 请求 event - 读取 supervisord 在 stdin 写入的 event
- 向 stdout 写入
RESULT 2\nOK
向 supervisord 确认 event 已接收
|
|
总结
- 客户端和服务端通过 xmlrpc 通信
- 主进程通过将 socket 和 pipe 设为非阻塞模式,然后通过轮询处理读写事件
- 主进程和子进程之间通过信号和 pipe 通信
参考链接
- supervisor: supervisor 源码
- xmlrpc_specification:xmlprc 协议文档
- xmlrpc_python_stdlib:xmlprc python标准库文档
- supervisor_gateway:基于 eventlistener 和 xmlrpc 实现的提供 RESTful API 的 supervisor 中间件