Supervisor 进程管理工具详解

解析:Supervisor 进程管理工具详解


一、Supervisor 核心功能

  1. 进程守护
    • 将普通命令行进程转为后台守护进程
    • 监控进程状态,异常退出时自动重启
    • 支持批量启动/关闭进程(如服务器宕机后一键恢复所有服务)
  2. 核心特性
    • 基于 Python 开发,支持跨平台
    • 通过子进程管理实现高可靠性
    • 支持非 root 用户管理进程
    • 提供 Web 管理界面(可选)

二、安装与验证

1. 安装方式
  • CentOS
    yum install -y epel-release
    yum -y install supervisor
  • Ubuntu/Debian
    apt-get install supervisor
  • pip 安装
    pip install supervisor
2. 安装验证
  • 生成关键命令:
    echo_supervisord_conf  # 生成配置文件模板
    supervisorctl          # 客户端控制工具
    supervisord            # 服务端主程序
  • 关键目录:
    /etc/supervisord.conf      # 主配置文件
    /etc/supervisord.d/        # 子配置文件目录
3. 启动服务
/usr/bin/supervisord -c /etc/supervisord.conf

三、配置文件解析

1. 主配置文件 (/etc/supervisord.conf)​
  • 核心配置段
    [unix_http_server]
    file=/var/run/supervisor/supervisor.sock ; UNIX socket 路径
    
    [supervisord]
    logfile=/var/log/supervisor/supervisord.log ; 日志路径
    pidfile=/var/run/supervisord.pid           ; PID 文件
    
    [include]
    files = supervisord.d/*.ini                ; 加载子配置
  • Web 管理(可选)​
    [inet_http_server]
    port=0.0.0.0:9001        ; 开放 IP 和端口
    username=user            ; 登录用户名
    password=123             ; 登录密码
2. 子配置文件(进程配置)​
  • 典型配置示例
    [program:nginx]
    command=/usr/sbin/nginx -g 'daemon off;'  ; 必须前台运行
    autostart=true          ; 随 Supervisor 启动
    autorestart=unexpected  ; 异常退出时重启
    stdout_logfile=/var/log/supervisor/nginx.log
    user=root               ; 运行用户
  • 关键参数说明
    参数 说明
    numprocs 启动进程副本数(需配合 %(process_num)s
    stopasgroup 停止时是否终止子进程(用于 Flask 等场景)
    environment 设置环境变量(如 PYTHONPATH="/opt/app"

四、进程管理命令

命令 功能
supervisorctl status 查看所有进程状态
supervisorctl start/stop [进程名|all] 启停单个/所有进程
supervisorctl restart [进程名|all] 重启进程
supervisorctl reread 重载配置(不重启)
supervisorctl update 应用新配置并启动新增进程

五、高级功能

1. Systemd 集成
  • 创建服务文件
    vim /usr/lib/systemd/system/supervisor.service
  • 服务配置
    [Unit]
    Description=Supervisor
    After=network.target
    
    [Service]
    ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
    ExecStop=/usr/bin/supervisorctl shutdown
2. 组管理
  • 配置示例
    [group:webapps]
    programs=nginx, gunicorn, celery
    
    [program:gunicorn]
    command=/opt/venv/bin/gunicorn app.wsgi
  • 操作命令
    supervisorctl start webapps:*    # 启动组内所有进程
    supervisorctl stop webapps:nginx # 停止组内单个进程

六、常见问题解决

问题场景 解决方案
进程频繁重启 (BACKOFF)​ 检查程序是否前台运行,确保日志无报错
权限问题导致 sock 文件缺失 执行 unlink /var/run/supervisor/supervisor.sock 后重启服务
多实例冲突 通过 ps -ef | grep supervisord 查找残留进程并终止
配置加载失败 使用 supervisorctl reread && supervisorctl update 强制更新

七、最佳实践

  1. 日志管理
    • 为每个进程单独配置日志文件
    • 设置合理的日志轮转策略(如 stdout_logfile_backups=10
  2. 安全建议
    • Web 管理界面需设置强密码
    • 使用非 root 用户运行敏感进程
  3. 性能优化
    • 根据 CPU 核心数设置 agcount(XFS 文件系统场景)
    • 对于高并发服务,使用组管理批量操作

总结

  • 核心价值​:简化进程守护、实现自动化运维
  • 适用场景​:Web 服务、后台任务队列、数据库连接池等需高可用的服务
  • 优势对比​:相比 systemd 更适合多进程管理,比 nohup 提供更完善的监控能力

通过合理配置和问题排查,Supervisor 可显著提升服务稳定性,是 Linux 系统管理中的核心工具之一。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇