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 能够帮助你稳定、高效地运行和监控各类应用程序。

相关推荐
过期动态21 分钟前
【动手学深度学习】卷积神经网络(CNN)入门
人工智能·python·深度学习·pycharm·cnn·numpy
从零开始学习人工智能1 小时前
Docker 镜像导出与导入:export/import vs save/load
运维·docker·容器
蔗理苦4 小时前
2025-04-05 吴恩达机器学习5——逻辑回归(2):过拟合与正则化
人工智能·python·机器学习·逻辑回归
啥都鼓捣的小yao5 小时前
Python解决“数字插入”问题
python·算法
rufeike5 小时前
Rclone同步Linux数据到google云盘
linux·运维·服务器
csdn_aspnet5 小时前
如何在 Linux 上安装 Python
linux·运维·python
慕容莞青5 小时前
MATLAB语言的进程管理
开发语言·后端·golang
陈明勇5 小时前
用 Go 语言轻松构建 MCP 客户端与服务器
后端·go·mcp
jimin_callon5 小时前
VBA第三十八期 VBA自贡分把表格图表生成PPT
开发语言·python·powerpoint·编程·vba·deepseek