Supervisor的安装和使用

Supervisor 使用笔记(CentOS 8 环境)

本周,老师让我使用supervisor管理项目服务,当时第一次听说过这个进程管理工具😶‍🌫️,就上网搜了搜安装和使用,又用ai查了一些细节,希望能够帮助到你们。

Supervisor 是一款基于 Python 的进程管理工具,可以帮助你集中管理和监控多个进程,自动重启异常退出的服务,并统一管理日志。下面介绍如何在 CentOS 8 环境中安装和配置 Supervisor,以及如何将其作为 systemd 服务来管理。


1. 环境准备

  • 操作系统: CentOS 8
  • Python 环境: Supervisor 是基于 Python 开发的,CentOS 8 默认支持 Python 3,但也可以使用虚拟环境。
  • 网络连接: 确保虚拟机能够访问外网,以便安装依赖包。

2. 安装 Supervisor

2.1 安装 Python3 和 pip

通常 CentOS 8 已经安装了 Python 3,可以通过以下命令检查版本:

bash 复制代码
python3 --version

若未安装 pip,则可以通过以下命令安装(如果已安装可跳过):

bash 复制代码
sudo dnf install python3-pip -y

2.2 安装 Supervisor

推荐使用 pip 安装 Supervisor:

bash 复制代码
sudo pip3 install supervisor

安装完成后,可通过下面命令确认安装版本:

bash 复制代码
supervisord --version

3. 配置 Supervisor

3.1 生成默认配置文件

Supervisor 提供了一个命令来生成默认的配置文件。可以将配置文件生成到常用路径(例如 /etc 或 /etc/supervisord.conf):

bash 复制代码
echo_supervisord_conf | sudo tee /etc/supervisord.conf

3.2 编辑配置文件

使用你喜欢的编辑器修改 /etc/supervisord.conf。主要需要关注以下部分:

  • unix_http_server

    用于进程间通信的 Unix socket 配置。默认配置通常可用,但注意检查权限设置。

  • supervisord

    定义 Supervisor 日志文件、pid 文件等基本参数。建议设置日志文件路径,例如 /var/log/supervisord.log。

  • program:x

    添加你需要管理的程序。示例如下:

    ini 复制代码
    [program:my_app]
    command=/usr/bin/python3 /path/to/your/app.py
    directory=/path/to/your/
    autostart=true
    autorestart=true
    stderr_logfile=/var/log/my_app_err.log
    stdout_logfile=/var/log/my_app_out.log

4. 使用 systemd 管理 Supervisor

在 CentOS 8 中,建议将 Supervisor 作为 systemd 服务来管理,以便随系统启动、停止和监控。

4.1 创建 systemd 服务文件

新建一个名为 /etc/systemd/system/supervisord.service 的文件,内容如下:

ini 复制代码
[Unit]
Description=Supervisor process control system for UNIX
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/supervisord -c /etc/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl shutdown
ExecReload=/usr/local/bin/supervisorctl reload
User=root
Restart=on-failure

[Install]
WantedBy=multi-user.target

注意: 如果 supervisord 和 supervisorctl 的路径不同(例如使用 which supervisord 命令查找路径),请根据实际路径修改 ExecStart、ExecStop 和 ExecReload 命令。

4.2 启用并启动 Supervisor 服务

执行以下命令使服务生效并启动 Supervisor:

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl enable supervisord
sudo systemctl start supervisord

查看服务状态,确保已正常运行:

bash 复制代码
sudo systemctl status supervisord

5. 使用 supervisorctl 管理进程

Supervisor 自带的命令行工具 supervisorctl 可用于管理和监控进程。

  • 查看所有进程状态:

    bash 复制代码
    sudo supervisorctl status
  • 启动、停止和重启进程:

    bash 复制代码
    sudo supervisorctl start my_app
    sudo supervisorctl stop my_app
    sudo supervisorctl restart my_app
  • 重新加载配置:

    当你修改了 /etc/supervisord.conf 或其他引入的配置文件后,使用下面命令使配置生效:

    bash 复制代码
    sudo supervisorctl reread
    sudo supervisorctl update

6. 日志管理与调试

  • 日志文件:

    Supervisor 会记录自身的日志(如 /var/log/supervisord.log)以及每个管理进程的标准输出和错误日志。请确保配置文件中定义的日志文件目录存在并有写入权限。

  • 查看实时日志:

    通过以下命令可以实时查看某个进程的日志:

    bash 复制代码
    sudo supervisorctl tail my_app stdout
    sudo supervisorctl tail my_app stderr
  • 调试建议:

    如进程频繁重启,检查日志信息,确认是否由于依赖环境、路径错误或权限问题导致。


7. 常见问题及解决方法

  • 配置文件修改后无效:

    修改配置后需执行 reread 和 update 命令,或重启 supervisord 服务。

  • 权限问题:

    检查 Unix socket、日志文件及工作目录的权限设置,确保 Supervisor 运行用户(如 root 或特定用户)有足够权限。

  • 路径问题:

    确认 supervisord 和 supervisorctl 的可执行文件路径是否正确(特别是在使用 pip 安装时可能位于 /usr/local/bin)。


总结

在 CentOS 8 虚拟机环境中使用 Supervisor,不仅可以通过 pip 轻松安装和配置,还能借助 systemd 将其管理为系统服务,实现自动启动和故障恢复。通过合理的配置和日志管理,Supervisor 能够帮助你稳定、高效地运行和监控各类应用程序。

相关推荐
像风一样自由20203 小时前
52.Docker部署大模型应用从本地开发到服务化运行
运维·人工智能·docker·容器·大模型·智能体
sxgzzn3 小时前
如何利用电缆故障定位在线监测系统提升供电安全?
运维·重构·无人机·开关柜局放在线监测·gis局放在线监测
mengchanmian4 小时前
VSFTP 服务器搭建(Centos)
运维·服务器·centos
行百里er4 小时前
Redis 完结篇——Redis 热点问题在 Spring Boot 项目中实战
redis·后端
Smoothcloud润云5 小时前
PyTorch大模型权重加载与启动耗时优化实战:定位磁盘、内存与显存瓶颈
人工智能·pytorch·python·深度学习·gpu算力
databook5 小时前
从循环到向量化:NumPy提速的7个关键思维
python·数据分析·numpy
别动我齐刘海5 小时前
Linux 系统调试学习1
linux·运维·服务器·c++·学习·机器学习·机器人
棉猴5 小时前
玩游戏学Python1-Python和pgzero库的安装
python·pygame·玩游戏·pgzero·pgzrun
高频因子挖掘机5 小时前
只取最近 60 个交易日,却每次拉全历史:量化脚本变慢的原因与改法
后端·github·api
诺伦6 小时前
GEO优化数据实证:78%引用流向官网的机制拆解与小品牌三步管线实战教程 | RiseClaw玄策
python·seo·geo·内容营销·ai搜索