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

注意: 如果 supervisordsupervisorctl 的路径不同(例如使用 which supervisord 命令查找路径),请根据实际路径修改 ExecStartExecStopExecReload 命令。

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. 常见问题及解决方法

  • 配置文件修改后无效:

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

  • 权限问题:

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

  • 路径问题:

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


总结

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

相关推荐
qq_白羊座2 分钟前
Langchain、Cursor、python的关系
开发语言·python·langchain
小陈的进阶之路2 分钟前
接口Mock测试
python·mock
kiku18184 分钟前
Python网络编程
开发语言·网络·python
帕里亚7 分钟前
ubuntu18.04 APT升级 glibc2.28 (Jetson)
linux·运维·windows
新新学长搞科研9 分钟前
【多所权威高校支持】第五届新能源系统与电力工程国际学术会议(NESP 2026)
运维·网络·人工智能·自动化·能源·信号处理·新能源
zncxCOS10 分钟前
【ETestDEV5教程30】ICD操作之信号组操作
python·测试工具·测试用例·集成测试
智购科技自动售货机16 分钟前
自动贩卖机厂家哪家价格公道
人工智能·python
金融数据出海17 分钟前
java对接美股股票api涵盖实时行情、K 线、指数等核心接口。
后端
cyber_两只龙宝18 分钟前
【Nginx】Nginx实现FastCGI详解
linux·运维·nginx·云原生·php·memcached·fastcgi
Thomas.Sir21 分钟前
智能革命:AI如何重塑金融风控与信贷审批的底层逻辑
人工智能·python·ai·风控