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