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
可用于管理和监控进程。
-
查看所有进程状态:
bashsudo supervisorctl status
-
启动、停止和重启进程:
bashsudo supervisorctl start my_app sudo supervisorctl stop my_app sudo supervisorctl restart my_app
-
重新加载配置:
当你修改了
/etc/supervisord.conf
或其他引入的配置文件后,使用下面命令使配置生效:bashsudo supervisorctl reread sudo supervisorctl update
6. 日志管理与调试
-
日志文件:
Supervisor 会记录自身的日志(如
/var/log/supervisord.log
)以及每个管理进程的标准输出和错误日志。请确保配置文件中定义的日志文件目录存在并有写入权限。 -
查看实时日志:
通过以下命令可以实时查看某个进程的日志:
bashsudo 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 能够帮助你稳定、高效地运行和监控各类应用程序。