Supervisor 是什么?

Supervisor 是什么?

Supervisor 是一个用 Python 开发的进程管理工具,用于在类 Unix 系统上监控、启动、停止和重启后台进程(守护进程)。


核心功能

功能说明
进程监控实时监控子进程状态,崩溃后自动重启
生命周期管理统一启动、停止、重启所有服务
日志管理自动收集和管理进程的 stdout/stderr 输出
配置简单使用 INI 格式配置文件,易于理解和维护
多进程管理一个 Supervisord 可以管理多个进程
Web 界面提供 Web 界面可视化操作(可选)
命令行工具supervisorctl 命令行操作

架构组成

┌─────────────────────────────────────────────────────┐
│                   用户/系统                         │
└─────────────────────────────────────────────────────┘
                         │
                         ▼
              ┌──────────────────┐
              │  supervisorctl   │  ◄── 命令行管理工具
              └──────────────────┘
                         │
                         ▼
              ┌──────────────────┐
              │   supervisord    │  ◄── 主进程(守护进程)
              └──────────────────┘
                         │
         ┌───────────────┼───────────────┐
         ▼               ▼               ▼
    ┌─────────┐    ┌─────────┐    ┌─────────┐
    │子进程 1  │    │子进程 2  │    │子进程 3  │  ◄── 被管理的应用
    │(Java)   │    │(Python) │    │(Nginx)  │
    └─────────┘    └─────────┘    └─────────┘

两个核心组件

  1. supervisord(服务端)

    • 后台运行的守护进程
    • 负责启动、监控和管理子进程
    • 读取配置文件
  2. supervisorctl(客户端)

    • 命令行工具
    • 连接 supervisord 发送管理命令
    • 查看状态、启动/停止进程

典型应用场景

1. 代替 nohup 后台运行

# ❌ 不推荐:无法自动重启,难以管理
nohup java -jar app.jar &

# ✅ 推荐:用 Supervisor 管理
[program:myapp]
command=java -jar /app/app.jar
autorestart=true

2. 高可用保障

# 进程崩溃后自动重启(3秒内)
autorestart=true
startretries=5

3. 批量管理微服务

# 一次命令重启所有服务
supervisorctl restart all

# 或重启某个组
supervisorctl restart backend:*

4. 容器/虚拟机环境

  • Docker 容器内作为 PID 1 进程
  • 管理容器内的多个服务

配置文件示例

; /etc/supervisor/conf.d/myapp.conf

[program:myapp]
command=java -jar /app/myapp.jar    ; 启动命令
directory=/app                       ; 工作目录
user=root                           ; 运行用户
autostart=true                      ; supervisord 启动时自动启动
autorestart=true                    ; 进程退出后自动重启
startretries=5                      ; 重启重试次数
startsecs=10                        ; 启动后认为成功的时间(秒)
stopasgroup=true                    ; 停止整个进程组
killasgroup=true                    ; 杀死整个进程组
stdout_logfile=/var/log/myapp.log   ; 标准输出日志
stderr_logfile=/var/log/myapp.err   ; 错误日志

与其他工具对比

工具特点适用场景
SupervisorPython 实现,配置简单,进程管理传统 VM/物理机,中小规模
SystemdLinux 内置,功能强大现代 Linux 系统(主流)
PM2Node.js 实现,生态丰富Node.js 应用
Docker/K8s容器化,自动恢复云原生环境
Monit轻量级,系统监控轻量监控 + 进程管理
runit轻量级,简单可靠嵌入式系统

为什么用 Supervisor 而不是 Systemd?

对比项SupervisorSystemd
简单性✅ 配置简单(INI 格式)⚠️ 较复杂
跨平台✅ macOS/Linux/BSD❌ 仅 Linux
开发环境✅ 易于本地测试⚠️ 需要系统权限
日志管理✅ 自动收集输出✅ 通过 journalctl
Web 界面✅ 内置 Web UI❌ 默认无
非 Root 用户✅ 可运行⚠️ 部分功能受限
依赖Python系统自带

安装和使用

安装

# Ubuntu/Debian
sudo apt-get install supervisor

# CentOS/RHEL
sudo yum install supervisor

# 使用 pip
pip install supervisor

启动

# 启动 supervisord
supervisord -c /etc/supervisor/supervisord.conf

# 设置开机自启(Ubuntu)
sudo systemctl enable supervisor
sudo systemctl start supervisor

管理命令

# 查看状态
supervisorctl status

# 启动应用
supervisorctl start myapp

# 停止应用
supervisorctl stop myapp

# 重启应用
supervisorctl restart myapp

# 重新加载配置
supervisorctl reread
supervisorctl update

Supervisor 在容器中的应用

在 Docker 中使用 Supervisor

FROM ubuntu:20.04

# 安装 supervisor
RUN apt-get update && apt-get install -y supervisor

# 复制 supervisor 配置
COPY supervisord.conf /etc/supervisor/supervisord.conf
COPY myapp.conf /etc/supervisor/conf.d/

# 启动 supervisor(作为 PID 1)
CMD ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisor/supervisord.conf"]

好处

  • 一个容器运行多个服务(不推荐,但有时需要)
  • 服务的自动恢复
  • 统一日志收集

Supervisor 的局限性

问题说明解决方案
不支持 Windows仅类 Unix 系统使用 Windows 服务
单点故障supervisord 本身可能崩溃使用 Systemd 守护
进程管理有限只能管理前台进程确保进程不以 daemon 模式运行
配置重启修改配置需要 reload使用 update 命令
资源限制不能限制 CPU/内存配合 cgroups/ulimit
日志轮转功能有限配合 logrotate

与你之前服务的结合

你之前提到的 maxvision-bp-acs 服务,用 Supervisor 管理后:

优势

  1. 自动重启:服务崩溃后 3 秒内自动拉起
  2. 统一管理:所有微服务通过 supervisorctl 统一控制
  3. 日志集中:输出自动保存到 /var/log/supervisor/
  4. 多环境配置:通过环境变量灵活切换

典型工作流

# 1. 修改代码,打包 JAR
mvn clean package

# 2. 停止服务
supervisorctl stop maxvision-bp-acs

# 3. 替换 JAR 包
cp target/app.jar /app/maxvision-bp-acs.jar

# 4. 启动服务
supervisorctl start maxvision-bp-acs

# 5. 查看日志验证
supervisorctl tail -f maxvision-bp-acs

总结

Supervisor 是一个轻量级但功能强大的进程管理工具,特别适合:

  • 🚀 替代 nohup 管理后台服务
  • 🔄 自动重启 保障高可用
  • 📊 统一管理 微服务集群
  • 🛠️ 简化运维 降低管理成本

类比:Supervisor 之于进程,就像 systemd 之于系统,但更简单、更轻量、更易用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思静鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值