目录
Supervisor 是一个专为类 Unix 系统设计的进程管理工具,采用 Client/Server 架构(服务端 supervisord / 客户端 supervisorctl),核心功能是监控、控制和管理多个后台进程。其主要特点和机制如下:
1. 核心功能
1.1 进程守护
自动启动配置的子进程,并在进程异常退出时执行重启操作,保障服务持续运行。
1.2 集中化管理
通过统一的服务端管理多个进程,支持命令行客户端 (supervisorctl) 或可选 Web UI 进行状态查看和操作(启动、停止、重启)。
1.3 日志聚合
捕获子进程的标准输出 (stdout) 和错误输出 (stderr),支持日志文件轮转与容量限制(如 stdout_logfile_maxbytes=1MB)。
2. 技术架构
- 服务端(supervisord):作为守护进程,负责加载配置、启动子进程、响应客户端指令并处理进程生命周期事件。
- 客户端(supervisorctl):提供类 Shell 的交互界面或命令参数,动态管理进程状态(如
supervisorctl restart all)。 - 配置文件:
默认主配置为/etc/supervisord.conf(INI 格式),子进程配置通常存放于/etc/supervisor/conf.d/目录,支持模块化部署。
3. 约束条件
- 进程类型约束:仅能管理由
supervisord直接启动的前台进程,无法接管已存在或后台运行的程序(如nohup启动的进程)。 - 平台兼容性:适用于 Linux/Unix 环境,不支持 Windows。
- 依赖要求:需 Python 2.4 及以上环境,当前主流版本已兼容 Python 3。
4. 部署方式
CentOS/RHEL为例
# 安装 EPEL 仓库(如未安装)
sudo yum install -y epel-release
# 安装 Supervisor
sudo yum install -y supervisor
# 启动服务并设置开机自启
sudo systemctl enable supervisord --now
5. 配置文件
5.1 主进程配置 [supervisord]
控制Supervisor守护进程的行为:
logfile:守护进程的日志路径(如/var/log/supervisord.log)pidfile:存储进程ID的文件路径(如/var/run/supervisord.pid)loglevel:日志级别(如info/debug)user:指定运行守护进程的系统用户(增强安全性)
5.2 通信接口配置
(a) UNIX Socket [unix_http_server]
file:Socket文件路径(如/tmp/supervisor.sock),供supervisorctl本地通信使用chmod/chown:设置Socket文件的权限和属主(如chmod=0700,chown=nobody:nogroup)
(b) TCP接口 [inet_http_server](可选)
port:Web管理界面端口(如:9001)username/password:访问控制的凭证
5.3 客户端工具配置 [supervisorctl]
定义supervisorctl的默认连接方式:
serverurl:连接地址(如unix:///tmp/supervisor.sock或http://127.0.0.1:9001)- 若启用认证,需同步配置
username/password
5.4 子进程管理配置 [program:x]
关键:此部分通常不直接写入主配置文件!
-
官方推荐实践:
- 在
/etc/supervisor/conf.d/或自定义目录(如/etc/supervisor/config.d/)中创建独立配置文件(如myapp.conf) - 在主配置中通过
[include]动态加载:[include] files = /etc/supervisor/config.d/*.conf # 支持通配符
- 在
-
子进程参数示例(在独立配置文件中):
[program:tomcat] command=/opt/app/bin/start.sh run # 启动命令 directory=/opt/app # 工作目录 stdout_logfile=/opt/app/logs/catalina.out # 标准输出日志 autostart=true # 随Supervisor自启 autorestart=unexpected # 异常退出时自动重启 user=app_user # 运行身份
5.5 其他配置项
environment:设置进程环境变量(如KEY="value")numprocs:启动的进程实例数量stopsignal:自定义停止信号(如SIGTERM)
6. Supervisorctl 命令解析
6.1 核心命令行选项
6.1.1 配置与连接参数
-c/--configuration:指定配置文件路径(默认路径为/etc/supervisord.conf)。-s/--serverurl:设定 Supervisord 服务器的监听地址(默认http://localhost:9001)。-u/--username:用于服务器身份验证的用户名。-p/--password:对应身份验证的密码(需与-u搭配使用)。
6.1.2 操作模式控制
-i/--interactive:执行命令后进入交互式 Shell 环境。-h/--help:显示完整帮助文档。
6.1.3 全局选项
-v/--version:输出当前 Supervisorctl 版本信息。
6.2 常用操作命令(Actions)
6.2.1 进程管理
supervisorctlstart <program>:启动指定进程(如start nginx)。supervisorctlstop <program>:停止指定进程。supervisorctlrestart <program>:重启目标进程。supervisorctlstatus:查看所有进程状态(支持status <program>过滤)。
6.2.2 配置与重载
supervisorctlupdate:重新加载配置文件并应用改动(自动启停受影响的进程)。supervisorctlreload:仅重载配置文件(不触发进程启停)。supervisorctlreread:检查配置文件变更(需配合update生效)。
6.2.3 日志操作
supervisorctltail <program> [stdout|stderr]:实时查看进程日志(如tail nginx stdout)。supervisorctlclear <program>:清空目标进程日志文件。
6.2.4 其他功能
supervisorctlavail:列出配置文件中定义的所有程序名称。supervisorctlremove <program>:从进程组中移除指定程序。supervisorctlshutdown:关闭 Supervisord 服务端。
6.3 使用模式示例
-
命令行模式:直接执行一次性操作,例如:
supervisorctl -s http://10.0.8.8:9001 -u admin -p Passw0rd restart webapp -
交互模式:启动交互式 Shell 后逐条执行操作:
supervisorctl -c /opt/supervisord.conf > status > stop worker > start cache > exit
1万+

被折叠的 条评论
为什么被折叠?



