用Supervisor进程守护托管OneAI中转服务的完整方
为什么需要Supervisor托管OneAI中转服务
很多用户在服务器上部署了OneAI中转服务(通常是Python或Node.js脚本),用来转发AI API请求。
但这类脚本一旦因内存不足、代码异常或网络波动退出,服务就会中断,必须手动重启。
Supervisor 是一个Linux下的进程管理工具,能自动监控并重启崩溃的子进程。
配合OneAI中转服务,它可以做到:
- 开机自启
- 崩溃后秒级重启
- 记录标准输出和错误日志
- 统一管理多个中转实例
下面从零开始,带你在服务器上完成整个配置。
安装Supervisor
如果你的服务器是 CentOS 7+,使用以下命令:
sudo yum install epel-release -y
sudo yum install supervisor -y
sudo systemctl enable supervisord
sudo systemctl start supervisord
如果你的服务器是 Ubuntu 18.04+ 或 Debian 10+:
sudo apt update
sudo apt install supervisor -y
sudo systemctl enable supervisor
sudo systemctl start supervisor
安装完成后可以用 supervisord --version 查看版本。
准备OneAI中转服务的启动命令
假设你的OneAI中转服务是一个Python脚本 /opt/oneai/oneai_proxy.py,正常启动命令是:
cd /opt/oneai && python3 oneai_proxy.py --port 5000
你需要先手动测试这条命令能否跑通,记录下工作目录和参数。
如果服务依赖虚拟环境,比如 venv,最好用绝对路径的Python解释器。
编写Supervisor配置文件
Supervisor的配置文件存放在 /etc/supervisor/conf.d/(CentOS下也可能是 /etc/supervisord.d/)。
创建一个新文件:
sudo vi /etc/supervisor/conf.d/oneai.ini
填入以下内容(根据实际路径调整):
[program:oneai]
command=/usr/bin/python3 /opt/oneai/oneai_proxy.py --port 5000
directory=/opt/oneai
autostart=true
autorestart=true
startretries=3
stderr_logfile=/var/log/oneai.err.log
stdout_logfile=/var/log/oneai.out.log
user=root
参数说明:
command:启动命令,用绝对路径避免找不到Python。directory:工作目录。autostart:Supervisor启动时自动拉起该进程。autorestart:进程退出后自动重启(true表示总是重启)。startretries:启动失败时重试次数。stderr_logfile/stdout_logfile:错误日志和普通日志路径。user:运行用户,一般用root或专有运行用户。
保存文件后,需要让Supervisor重新加载配置:
sudo supervisorctl reread
sudo supervisorctl update
启动并验证监控效果
用以下命令查看进程状态:
sudo supervisorctl status
如果状态显示 RUNNING 并且 PID 数字正确,说明配置成功。
验证自动重启: 手动杀掉OneAI进程:
# 找到OneAI的PID
ps aux | grep oneai_proxy
# 杀掉进程
kill -9 那个PID
# 再检查Supervisor状态
sudo supervisorctl status
你会看到状态一度变成 STOPPED,然后很快恢复为 RUNNING。
说明Supervisor已经自动拉起了进程。
如果不想用命令行,也可以通过Supervisor的Web管理面板(需额外配置)或者日志来查看:
tail -f /var/log/oneai.out.log
避坑指南与常见问题
1. 启动报错 "unix:///var/run/supervisor/supervisor.sock"
通常是因为Supervisor服务未启动或socket路径不对。
用 systemctl status supervisord 检查服务状态,未启动则手动启动。
2. OneAI进程启动后又立即退出
检查OneAI脚本本身是否有依赖缺失,或者端口被占用。
可以先手动执行命令看错误输出,然后修正后再用Supervisor启动。
3. 环境变量问题
OneAI中转服务如果依赖某些环境变量(如API_KEY),需要在配置文件中用 environment 指令传入:
environment=API_KEY="sk-xxx",OTHER_VAR="value"
4. 如何管理多个OneAI实例?
创建多个 .ini 文件,每个文件里 [program:xxx] 的名称不同即可,Supervisor会统一管理。
5. 日志文件不生成或权限不足
确保日志目录存在且Supervisor的运行用户有写权限。
如果日志目录不存在,Supervisor会自动创建(需要父目录有写权限)。
总结
通过Supervisor进程守护托管OneAI中转服务,你只需要配置一个简单的INI文件,就能实现自动重启和日志记录,大大降低人工干预。
后续如果需要调整启动参数,修改配置后执行 supervisorctl update 即可生效。
如果你在配置过程中遇到命令或路径问题,可以先用 supervisorctl status 获取更多提示,或者检查 /var/log/supervisor/ 下的Supervisor自身日志。
坚持一步一步来,零基础也能搞定。