Supervisor 是什么? Supervisor 是什么Supervisor是一个用 Python 开发的进程管理工具用于在类 Unix 系统上监控、启动、停止和重启后台进程守护进程。核心功能功能说明进程监控实时监控子进程状态崩溃后自动重启生命周期管理统一启动、停止、重启所有服务日志管理自动收集和管理进程的 stdout/stderr 输出配置简单使用 INI 格式配置文件易于理解和维护多进程管理一个 Supervisord 可以管理多个进程Web 界面提供 Web 界面可视化操作可选命令行工具supervisorctl命令行操作架构组成┌─────────────────────────────────────────────────────┐ │ 用户/系统 │ └─────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────┐ │ supervisorctl │ ◄── 命令行管理工具 └──────────────────┘ │ ▼ ┌──────────────────┐ │ supervisord │ ◄── 主进程守护进程 └──────────────────┘ │ ┌───────────────┼───────────────┐ ▼ ▼ ▼ ┌─────────┐ ┌─────────┐ ┌─────────┐ │子进程 1 │ │子进程 2 │ │子进程 3 │ ◄── 被管理的应用 │(Java) │ │(Python) │ │(Nginx) │ └─────────┘ └─────────┘ └─────────┘两个核心组件supervisord服务端后台运行的守护进程负责启动、监控和管理子进程读取配置文件supervisorctl客户端命令行工具连接 supervisord 发送管理命令查看状态、启动/停止进程典型应用场景1.代替 nohup 后台运行# ❌ 不推荐无法自动重启难以管理nohupjava-jarapp.jar# ✅ 推荐用 Supervisor 管理[program:myapp]commandjava-jar/app/app.jarautorestarttrue2.高可用保障# 进程崩溃后自动重启3秒内autorestarttruestartretries53.批量管理微服务# 一次命令重启所有服务supervisorctl restart all# 或重启某个组supervisorctl restart backend:*4.容器/虚拟机环境Docker 容器内作为 PID 1 进程管理容器内的多个服务配置文件示例; /etc/supervisor/conf.d/myapp.conf [program:myapp] commandjava -jar /app/myapp.jar ; 启动命令 directory/app ; 工作目录 userroot ; 运行用户 autostarttrue ; supervisord 启动时自动启动 autorestarttrue ; 进程退出后自动重启 startretries5 ; 重启重试次数 startsecs10 ; 启动后认为成功的时间秒 stopasgrouptrue ; 停止整个进程组 killasgrouptrue ; 杀死整个进程组 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开发环境✅ 易于本地测试⚠️ 需要系统权限日志管理✅ 自动收集输出✅ 通过 journalctlWeb 界面✅ 内置 Web UI❌ 默认无非 Root 用户✅ 可运行⚠️ 部分功能受限依赖Python系统自带安装和使用安装# Ubuntu/Debiansudoapt-getinstallsupervisor# CentOS/RHELsudoyuminstallsupervisor# 使用 pippipinstallsupervisor启动# 启动 supervisordsupervisord-c/etc/supervisor/supervisord.conf# 设置开机自启Ubuntusudosystemctlenablesupervisorsudosystemctl start supervisor管理命令# 查看状态supervisorctl status# 启动应用supervisorctl start myapp# 停止应用supervisorctl stop myapp# 重启应用supervisorctl restart myapp# 重新加载配置supervisorctl reread supervisorctl updateSupervisor 在容器中的应用在 Docker 中使用 SupervisorFROM 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 管理后优势✅自动重启服务崩溃后 3 秒内自动拉起✅统一管理所有微服务通过supervisorctl统一控制✅日志集中输出自动保存到/var/log/supervisor/✅多环境配置通过环境变量灵活切换典型工作流# 1. 修改代码打包 JARmvn clean package# 2. 停止服务supervisorctl stop maxvision-bp-acs# 3. 替换 JAR 包cptarget/app.jar /app/maxvision-bp-acs.jar# 4. 启动服务supervisorctl start maxvision-bp-acs# 5. 查看日志验证supervisorctltail-fmaxvision-bp-acs总结Supervisor是一个轻量级但功能强大的进程管理工具特别适合替代 nohup管理后台服务自动重启保障高可用统一管理微服务集群️简化运维降低管理成本类比Supervisor 之于进程就像 systemd 之于系统但更简单、更轻量、更易用。