详细版 Supervisor 排查与配置指南

详细版 Supervisor 排查与配置指南

第 1 步:确保 Supervisor 已正确安装

  1. 检查是否已安装 Supervisor
    使用以下命令查看 Supervisor 是否已安装:

    which supervisord
    

    如果返回路径(例如 /usr/bin/supervisord),说明已安装。如果未安装,继续下一步。

  2. 安装 Supervisor

    • CentOS/RHEL 系列:
      yum install epel-release -y
      yum install supervisor -y
      
    • Ubuntu/Debian 系列:
      apt update
      apt install supervisor -y
      
  3. 验证安装版本
    查看 Supervisor 的安装版本:

    supervisord --version
    

第 2 步:启动 Supervisor 并验证服务状态

  1. 启动 supervisord 服务
    如果是手动运行 Supervisor,使用以下命令启动:

    supervisord -c /etc/supervisord.conf
    

    如果使用 systemd 管理服务,运行:

    systemctl start supervisord
    
  2. 查看 supervisord 状态
    查看 Supervisor 是否正在运行:

    ps aux | grep supervisord
    
  3. 验证服务状态
    使用以下命令检查服务状态:

    systemctl status supervisord
    
  4. 停止可能的重复进程
    如果发现多个 Supervisor 实例运行,停止所有实例:

    pkill supervisord
    

第 3 步:检查主配置文件的正确性

  1. 主配置文件路径
    常见的主配置文件路径为 /etc/supervisord.conf,如果不确定路径,可以运行:

    find /etc -name "supervisord.conf"
    
  2. 关键配置项
    打开 /etc/supervisord.conf,确保以下内容存在:

    [supervisord]
    logfile=/var/log/supervisor/supervisord.log  ; 主日志文件路径
    pidfile=/var/run/supervisord.pid            ; PID 文件路径
    childlogdir=/var/log/supervisor             ; 子程序日志路径
    
    [unix_http_server]
    file=/var/run/supervisor.sock               ; socket 文件路径
    chmod=0700                                  ; 权限设置
    
    [include]
    files = /etc/supervisord.d/*.conf           ; 子配置文件目录及匹配规则
    
  3. 测试配置文件语法
    使用以下命令测试主配置文件是否有语法错误:

    supervisord -n -c /etc/supervisord.conf
    

    如果有语法错误,请根据提示修复。


第 4 步:检查文件与目录的权限

  1. 检查 Supervisor 的运行目录
    确保以下目录存在并具有适当权限:

    mkdir -p /var/log/supervisor /var/run
    chmod -R 755 /var/log/supervisor /var/run
    
  2. 检查子配置文件目录
    查看 /etc/supervisord.d/ 目录下的文件:

    ls -l /etc/supervisord.d/
    

    确保所有配置文件均可被 root 或运行用户读取。


第 5 步:验证子程序配置文件

  1. 检查程序配置文件
    打开 /etc/supervisord.d/*.conf 文件,确保以下关键参数正确配置:

    [program:example_program]
    directory=/path/to/program                 ; 程序运行目录
    command=/path/to/program_binary            ; 程序启动命令
    autostart=true                             ; Supervisor 启动时自动运行
    autorestart=true                           ; 异常退出时自动重启
    user=root                                  ; 运行用户(可根据需要修改)
    stdout_logfile=/var/log/supervisor/example.log ; 标准输出日志
    stderr_logfile=/var/log/supervisor/example.err ; 标准错误日志
    
  2. 验证程序文件是否存在并可执行

    ls -l /path/to/program_binary
    

    如果文件没有执行权限,添加权限:

    chmod +x /path/to/program_binary
    
  3. 检查日志路径是否存在
    如果配置了日志路径(如 /var/log/supervisor/example.log),确保目录存在:

    mkdir -p /var/log/supervisor
    chmod -R 755 /var/log/supervisor
    

第 6 步:重新加载配置并测试 Supervisor

  1. 重新加载配置

    supervisorctl reread
    supervisorctl update
    
  2. 查看 Supervisor 管理的程序状态

    supervisorctl status
    

第 7 步:解决常见问题

  1. 端口冲突
    如果日志中显示端口被占用,检查默认端口(9001)是否冲突:

    netstat -tulnp | grep 9001
    

    如果冲突,修改 /etc/supervisord.conf[inet_http_server] 的端口:

    [inet_http_server]
    port=127.0.0.1:9002
    
  2. 权限问题
    如果日志中提示 Permission denied,检查相关目录的权限,确保其对运行用户可读写。

  3. 配置文件未加载
    如果某些子配置文件未被加载,检查 [include] 的文件扩展名规则是否匹配实际文件名。


第 8 步:通过 Systemd 管理 Supervisor

  1. 创建 Systemd 服务文件
    如果缺少 /etc/systemd/system/supervisord.service 文件,可以创建:

    [Unit]
    Description=Supervisor process control system
    After=network.target
    
    [Service]
    ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
    ExecStop=/usr/bin/supervisorctl shutdown
    ExecReload=/usr/bin/supervisorctl reload
    KillMode=process
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    
  2. 加载并启用服务

    systemctl daemon-reload
    systemctl enable supervisord
    systemctl start supervisord
    
  3. 查看服务状态

    systemctl status supervisord
    

第 9 步:检查日志文件以定位问题

  1. Supervisor 主日志文件
    查看 /var/log/supervisor/supervisord.log

    tail -f /var/log/supervisor/supervisord.log
    
  2. 程序日志文件
    如果配置了 stdout_logfilestderr_logfile,检查对应日志文件中的错误信息。


第 10 步:最终验证

  1. 查看 Supervisor 管理的所有程序:
    supervisorctl status
    
  2. 如果一切正常,可以重启 Supervisor 服务:
    systemctl restart supervisord
    

此指南全面涵盖了 Supervisor 的安装、配置、权限问题排查、端口冲突解决和日志分析等内容,适用于各种场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值