CentOS、RedHat下Supervisor安装与使用

Supervisor 是一款用 Python 编写的进程管理工具,可以将任意程序转为后台守护进程,并提供自动重启、日志记录、进程状态监控等功能,常用于部署服务、脚本、Web 应用等。

1. 安装 EPEL 源(如果未安装)

sudo yum install epel-release -y

2. 安装 Supervisor

sudo yum install supervisor -y

3. 启动并设置开机启动

sudo systemctl enable supervisord
sudo systemctl start supervisord

4. 配置文件

主配置文件路径:
/etc/supervisord.conf
子配置推荐放在:
/etc/supervisord.d/jwt_api_8080.ini
/etc/supervisord.conf 中确保引入子配置路径:
grep   ^files    /etc/supervisord.conf 
files = supervisord.d/*.ini
示例服务配置:
cat    /etc/supervisord.d/jwt_api_8080.ini 
[program:jwt_api_8080]
directory=/etc/nginx/html/kouzi/html/py
command=/usr/local/bin/gunicorn -w 4 -b 0.0.0.0:8080 jwt_api_8080:app
autostart=true
autorestart=true
stderr_logfile=/var/log/supervisor/jwt_api_8080_err.log
stdout_logfile=/var/log/supervisor/jwt_api_8080_out.log
user=root
environment=PYTHONUNBUFFERED=1
字段说明:
  • [program:jwt_api_8080]:定义一个名为 jwt_api_8080 的进程块
  • command:要启动的命令,如 gunicorn 启动 Python 应用
  • directory:工作目录,Supervisor 会在该目录下执行命令
  • autostart:启动 Supervisor 时自动启动该进程(true/false)
  • autorestart:进程异常退出时自动重启(true/false)
  • stderr_logfile:标准错误日志文件路径
  • stdout_logfile:标准输出日志文件路径
  • user:以哪个系统用户身份运行进程
  • environment:设置环境变量,例:PYTHONUNBUFFERED=1 表示禁用 Python 输出缓冲
使配置生效、重启Supervisor服务:
# 重新读取配置文件,检测是否有新的程序被添加或删除。
sudo supervisorctl reread
# 根据 reread 检测到的变化,真正去加载新配置并启动新程序,或停止已被删除的程序。
sudo supervisorctl update
# 重启服务-可选
sudo systemctl restart supervisord

检查python脚本是否启动运行中:

netstat -anptul  |grep    8080
ps -ef  |grep  jwt_api_8080

5. 常用命令

# 加载配置并重启所有受控服务(会重启 Supervisor 本身)
sudo supervisorctl reload

# 重新读取配置文件(不立即启动新服务)
sudo supervisorctl reread

# 应用配置变更(添加或删除的服务会启动/关闭)
sudo supervisorctl update

# 查看所有进程状态
sudo supervisorctl status

# 启动指定服务
sudo supervisorctl start myapp

# 停止指定服务
sudo supervisorctl stop myapp

# 重启指定服务
sudo supervisorctl restart myapp

# 查看指定服务日志
sudo supervisorctl tail myapp

# 实时查看日志(类似 tail -f)
sudo supervisorctl tail -f myapp