Supervisor进程管理
Supervisor 是一个用 Python 写的进程管理工具,用于管理非守护(non-daemon)进程。它可以用来启动、停止、重启、监控进程,并在进程意外崩溃时自动重启。
场景用途
Supervisor 常用于:
1、后台运行的脚本或服务,如:Celery worker / beat、Gunicorn/Django/Flask 等 Web 服务、队列消费脚本
2、需要自动重启的服务
3、开机启动任务
安装 Supervisor
sudo apt update
sudo apt install supervisor
安装完成后,Supervisor 会自动创建并启动 supervisord 服务。
文件结构与位置
类型 | 位置 |
---|---|
主配置文件 | /etc/supervisor/supervisord.conf |
子配置文件目录 | /etc/supervisor/conf.d/ |
日志文件默认位置 | /var/log/supervisor/ |
一般我们只需要在 conf.d 里添加服务配置文件即可。
Supervisor 配置文件结构示例
#实战
[program:xxx_assignment]
command=/home/ubuntu/venv/xxenv/bin/python /home/ubuntu/web/your_project/SysManage/funcations/xxx_assignment.py
autostart=true
autorestart=true
stdout_logfile=/home/ubuntu/web/logs/xxx_assignment/xxx_assignment.out.log
stdout_logfile_maxbytes=100MB
stderr_logfile=/home/ubuntu/web/logs/xxx_assignment/xxx_assignment.err.log
stderr_logfile_maxbytes=100MB
#样例
[program:myworker]
command=python3 /home/ubuntu/my_script.py
directory=/home/ubuntu
autostart=true
autorestart=true
startsecs=5
stopwaitsecs=600
stdout_logfile=/var/log/myworker.log
stderr_logfile=/var/log/myworker.err
user=ubuntu
配置字段详解:
参数 | 说明 |
---|---|
program:<name> | 程序名称,用于 supervisorctl 命令 |
command | 要执行的命令(完整路径) |
directory | 工作目录(命令执行时的位置) |
autostart | Supervisor 启动时自动运行此程序 |
autorestart | 程序异常退出后自动重启 |
startsecs | 启动后持续运行多少秒算启动成功 |
stopwaitsecs | 等待进程关闭的最大秒数 |
stdout_logfile / stderr_logfile | 日志输出位置 |
user | 使用哪个用户执行命令 |
environment | 环境变量配置,支持虚拟环境或定制路径 |
常用命令
# 查看所有进程状态
sudo supervisorctl status# 启动/停止/重启某个进程
sudo supervisorctl start <name>
sudo supervisorctl stop <name>
sudo supervisorctl restart <name># 重新读取配置(新增或删除配置文件后执行)
sudo supervisorctl reread# 更新 supervisor 的进程管理列表(激活新配置)
sudo supervisorctl update# 查看所有配置是否有语法问题
sudo supervisorctl avail
注意事项
1、日志文件路径一定要存在,避免无法写入。
2、子配置文件一定要以 .conf 结尾,且放在 /etc/supervisor/conf.d/ 中才会被加载。
3、子配置文件配置好后使用 reread + update 重新读取和激活配置