)
Nanbeige4.1-3B部署教程Supervisor进程管理配置详解含开机自启与异常重启1. 引言为什么需要进程管理当你把Nanbeige4.1-3B这个30亿参数的小模型部署到服务器上准备让它7x24小时稳定提供服务时可能会遇到几个头疼的问题服务器重启后服务不会自动启动需要手动登录去敲命令程序运行中突然崩溃了没人知道用户访问直接报错想查看服务的运行日志不知道去哪里找多个服务需要管理每个都要单独维护启动脚本这些问题正是Supervisor这个进程管理工具要解决的。今天这篇文章我就手把手带你配置Supervisor让Nanbeige4.1-3B服务实现开机自启和异常自动重启真正做到部署一次长期运行。1.1 学习目标通过这篇教程你将掌握Supervisor的安装和基本配置- 从零开始搭建进程管理环境为Nanbeige4.1-3B配置专属服务- 让模型服务在Supervisor的管理下运行实现开机自启动- 服务器重启后服务自动恢复配置异常自动重启- 程序崩溃后自动恢复保障服务高可用日志管理和状态监控- 随时查看服务运行状态和日志1.2 前置知识基本的Linux命令行操作cd、ls、vim等已经按照之前的教程部署了Nanbeige4.1-3B的WebUI服务了解服务的基本启动命令python webui.py如果你还没有部署Nanbeige4.1-3B建议先完成基础部署再来看这篇进程管理的内容。2. Supervisor快速安装与基础配置2.1 什么是Supervisor简单来说Supervisor就是一个服务管家。它负责启动服务按照你的配置启动应用程序监控服务时刻盯着服务是否在正常运行重启服务当服务意外退出时自动重新启动管理日志把服务的输出包括错误信息保存到指定文件集中管理一个Supervisor可以管理多个不同的服务对于我们的Nanbeige4.1-3B服务来说有了Supervisor就等于有了一个24小时在线的运维人员。2.2 安装Supervisor在Ubuntu/Debian系统上安装Supervisor非常简单# 更新包列表 sudo apt update # 安装Supervisor sudo apt install supervisor -y # 检查安装是否成功 supervisord --version安装完成后Supervisor会自动启动你可以用下面的命令检查状态# 查看Supervisor服务状态 sudo systemctl status supervisor # 如果没启动手动启动 sudo systemctl start supervisor # 设置开机自启Supervisor本身 sudo systemctl enable supervisor2.3 理解Supervisor的配置文件结构Supervisor的配置文件主要分为两部分主配置文件/etc/supervisor/supervisord.conf这是Supervisor自己的全局配置一般不需要修改保持默认即可程序配置文件/etc/supervisor/conf.d/目录下的.conf文件每个服务一个配置文件我们为Nanbeige4.1-3B创建的配置就放在这里先看看Supervisor的默认目录结构# 查看Supervisor相关目录 ls -la /etc/supervisor/ # 输出 # conf.d/ # 存放程序配置文件的目录 # supervisord.conf # 主配置文件 ls -la /etc/supervisor/conf.d/ # 初始时这个目录是空的我们会在这里创建配置3. 为Nanbeige4.1-3B配置Supervisor服务3.1 创建Nanbeige4.1-3B的Supervisor配置现在我们来为Nanbeige4.1-3B的WebUI服务创建配置文件。假设你的项目目录是/root/nanbeige-webuiWebUI的主程序是webui.py。创建配置文件# 切换到配置目录 cd /etc/supervisor/conf.d/ # 创建Nanbeige4.1-3B的配置文件 sudo nano nanbeige-webui.conf在编辑器中输入以下配置内容[program:nanbeige-webui] # 程序名称在Supervisor中显示的名字 commandpython /root/nanbeige-webui/webui.py # 启动命令就是平时手动启动的命令 directory/root/nanbeige-webui # 工作目录程序运行时的当前目录 userroot # 运行用户根据你的实际情况设置 autostarttrue # 是否自动启动true表示Supervisor启动时自动启动这个程序 autorestarttrue # 是否自动重启true表示程序退出时自动重启 startretries3 # 启动失败后的重试次数 startsecs10 # 程序启动后等待多少秒才认为启动成功 stopwaitsecs10 # 停止程序时等待多少秒 stdout_logfile/var/log/supervisor/nanbeige-webui-stdout.log # 标准输出日志文件路径 stderr_logfile/var/log/supervisor/nanbeige-webui-stderr.log # 标准错误日志文件路径 stdout_logfile_maxbytes10MB # 标准输出日志文件最大大小 stderr_logfile_maxbytes10MB # 标准错误日志文件最大大小 stdout_logfile_backups5 # 保留多少个标准输出日志备份 stderr_logfile_backups5 # 保留多少个标准错误日志备份 environmentPYTHONPATH/root/nanbeige-webui,PATH/usr/local/bin:/usr/bin:/bin # 环境变量设置按CtrlX然后按Y再按Enter保存文件。3.2 配置详解每个参数的作用让我解释一下上面配置中几个关键参数autostarttrue这是实现开机自启的关键。当Supervisor服务本身启动时比如服务器重启后会自动启动所有配置了autostarttrue的程序。autorestarttrue这是实现异常重启的关键。当程序因为任何原因退出时崩溃、被杀死等Supervisor会自动重新启动它。startretries3如果程序启动失败Supervisor会尝试重启3次。如果3次都失败就会放弃并标记为FATAL状态。stdout_logfile和stderr_logfile这两个参数指定了日志文件的路径。所有程序输出的信息包括你print的内容都会保存到这些文件里方便排查问题。3.3 让Supervisor加载新配置创建好配置文件后需要让Supervisor重新加载配置# 重新读取所有配置文件 sudo supervisorctl reread # 输出应该显示 # nanbeige-webui: available # 更新配置让新配置生效 sudo supervisorctl update # 输出应该显示 # nanbeige-webui: added process group现在Nanbeige4.1-3B的服务已经添加到Supervisor的管理中了但还没有启动。让我们启动它# 启动nanbeige-webui服务 sudo supervisorctl start nanbeige-webui # 查看服务状态 sudo supervisorctl status # 你应该看到类似这样的输出 # nanbeige-webui RUNNING pid 12345, uptime 0:00:10如果状态显示RUNNING恭喜你Nanbeige4.1-3B服务已经在Supervisor的管理下运行了。4. 验证与测试看看效果如何4.1 测试WebUI服务是否正常首先检查WebUI服务是否真的在运行# 查看服务监听的端口 netstat -tlnp | grep 7860 # 或者用curl测试 curl -I http://localhost:7860如果服务正常你应该能看到WebUI的响应。也可以通过浏览器访问http://你的服务器IP:7860来确认。4.2 测试异常自动重启功能现在我们来模拟一个程序崩溃的场景看看Supervisor是否会自动重启服务# 首先找到服务的进程ID sudo supervisorctl status # 记下pid比如12345 # 手动杀死这个进程模拟崩溃 sudo kill -9 12345 # 等待几秒然后再次查看状态 sudo supervisorctl status # 你应该看到 # nanbeige-webui RUNNING pid 67890, uptime 0:00:05 # pid变了说明Supervisor自动重启了服务4.3 测试开机自启动功能要测试开机自启最简单的方法是重启Supervisor服务本身# 重启Supervisor服务 sudo systemctl restart supervisor # 等待几秒然后查看nanbeige-webui的状态 sudo supervisorctl status nanbeige-webui # 如果配置了autostarttrue应该显示RUNNING状态真正的开机自启需要在服务器重启时测试但原理是一样的Supervisor服务设置为开机自启而Supervisor会启动所有autostarttrue的程序。4.4 查看和管理日志Supervisor帮我们管理了日志查看起来非常方便# 查看标准输出日志程序正常打印的信息 tail -f /var/log/supervisor/nanbeige-webui-stdout.log # 查看错误日志程序的错误信息 tail -f /var/log/supervisor/nanbeige-webui-stderr.log # 查看完整的日志文件 cat /var/log/supervisor/nanbeige-webui-stdout.log日志文件会自动轮转rotation当文件达到stdout_logfile_maxbytes指定的大小时会自动创建新的日志文件并保留指定数量的备份。5. 高级配置与优化技巧5.1 配置进程数量多worker如果你的服务器配置比较高可以启动多个Nanbeige4.1-3B的worker进程来提高并发处理能力。修改配置文件[program:nanbeige-webui] commandpython /root/nanbeige-webui/webui.py directory/root/nanbeige-webui userroot autostarttrue autorestarttrue process_name%(program_name)s_%(process_num)02d # 进程名称格式会生成nanbeige-webui_00, nanbeige-webui_01等 numprocs2 # 启动2个进程 startretries3 startsecs10 stopwaitsecs10 stdout_logfile/var/log/supervisor/nanbeige-webui-stdout-%(process_num)02d.log stderr_logfile/var/log/supervisor/nanbeige-webui-stderr-%(process_num)02d.log # 日志文件也按进程编号区分 stdout_logfile_maxbytes10MB stderr_logfile_maxbytes10MB stdout_logfile_backups5 stderr_logfile_backups5 environmentPYTHONPATH/root/nanbeige-webui,PATH/usr/local/bin:/usr/bin:/bin这样配置后Supervisor会启动2个独立的nanbeige-webui进程每个进程都有自己的日志文件。5.2 配置资源限制为了防止Nanbeige4.1-3B服务占用过多资源可以设置资源限制[program:nanbeige-webui] # ... 其他配置保持不变 ... priority999 # 进程优先级数字越小优先级越高 stopsignalTERM # 停止信号默认是TERM也可以设置为INT或KILL stopasgrouptrue # 停止时同时停止整个进程组 killasgrouptrue # 杀死时同时杀死整个进程组 redirect_stderrtrue # 将标准错误重定向到标准输出 stdout_events_enabledtrue stderr_events_enabledtrue # 启用事件监听可以配合eventlistener使用5.3 使用环境变量文件如果你的Nanbeige4.1-3B需要特定的环境变量可以创建一个环境变量文件# 创建环境变量文件 sudo nano /root/nanbeige-webui/.env在文件中添加需要的环境变量# Nanbeige4.1-3B环境变量 MODEL_PATH/root/ai-models/nanbeige/Nanbeige4___1-3B PYTHONPATH/root/nanbeige-webui CUDA_VISIBLE_DEVICES0然后在Supervisor配置中引用这个文件[program:nanbeige-webui] # ... 其他配置 ... environmentHOME/root,USERroot # 基础环境变量 env_file/root/nanbeige-webui/.env # 从文件加载环境变量5.4 配置Web管理界面可选Supervisor还提供了一个Web管理界面可以方便地在浏览器中管理服务。启用方法# 编辑Supervisor主配置 sudo nano /etc/supervisor/supervisord.conf找到[inet_http_server]部分取消注释并修改[inet_http_server] port0.0.0.0:9001 ; 监听所有IP的9001端口 usernameadmin ; Web界面用户名 passwordyour_password ; Web界面密码保存后重启Supervisorsudo systemctl restart supervisor现在可以通过浏览器访问http://你的服务器IP:9001来管理服务了。6. 常用管理命令汇总6.1 Supervisor服务管理# 启动Supervisor服务 sudo systemctl start supervisor # 停止Supervisor服务 sudo systemctl stop supervisor # 重启Supervisor服务 sudo systemctl restart supervisor # 查看Supervisor服务状态 sudo systemctl status supervisor # 设置Supervisor开机自启 sudo systemctl enable supervisor # 禁用Supervisor开机自启 sudo systemctl disable supervisor6.2 程序管理命令# 查看所有程序状态 sudo supervisorctl status # 查看特定程序状态 sudo supervisorctl status nanbeige-webui # 启动程序 sudo supervisorctl start nanbeige-webui # 停止程序 sudo supervisorctl stop nanbeige-webui # 重启程序 sudo supervisorctl restart nanbeige-webui # 重新加载配置文件 sudo supervisorctl reread sudo supervisorctl update # 查看所有程序的日志 sudo supervisorctl tail -f nanbeige-webui # 查看标准输出日志 sudo supervisorctl tail -f nanbeige-webui stdout # 查看错误日志 sudo supervisorctl tail -f nanbeige-webui stderr6.3 批量操作命令# 启动所有程序 sudo supervisorctl start all # 停止所有程序 sudo supervisorctl stop all # 重启所有程序 sudo supervisorctl restart all # 重新加载所有配置 sudo supervisorctl reload7. 故障排查与常见问题7.1 服务启动失败如果sudo supervisorctl status显示FATAL或BACKOFF# 查看详细的错误信息 sudo supervisorctl tail nanbeige-webui stderr # 常见问题1权限不足 # 解决方法确保工作目录和日志目录有正确的权限 sudo chmod 755 /root/nanbeige-webui sudo chown -R root:root /root/nanbeige-webui # 常见问题2Python环境问题 # 解决方法确认在正确的Python环境中 # 在command中指定完整的Python路径 command/root/miniconda3/envs/nanbeige/bin/python /root/nanbeige-webui/webui.py # 常见问题3端口被占用 # 解决方法修改WebUI的端口或者在启动前杀死占用端口的进程 commandpython /root/nanbeige-webui/webui.py --port 78617.2 服务频繁重启如果服务不断重启可能是配置问题# 查看重启历史 sudo supervisorctl tail nanbeige-webui # 调整startsecs参数给服务更长的启动时间 startsecs30 # 从10秒增加到30秒 # 调整startretries参数减少重试次数 startretries1 # 从3次减少到1次快速失败便于排查7.3 日志文件不更新如果日志文件没有内容# 检查日志文件权限 ls -la /var/log/supervisor/ # 如果权限不对修复权限 sudo chmod 755 /var/log/supervisor/ sudo chown root:root /var/log/supervisor/nanbeige-webui-*.log # 检查程序是否有输出 # 可以临时直接运行程序看是否有输出 cd /root/nanbeige-webui python webui.py7.4 Supervisor命令不生效如果supervisorctl命令没有反应# 检查Supervisor服务是否运行 sudo systemctl status supervisor # 检查socket文件 ls -la /var/run/supervisor.sock # 重启Supervisor服务 sudo systemctl restart supervisor # 如果还是不行强制重新加载 sudo supervisorctl shutdown sudo supervisord -c /etc/supervisor/supervisord.conf8. 总结通过这篇教程我们完成了Nanbeige4.1-3B服务的Supervisor进程管理配置。现在你的模型服务已经具备了开机自启动- 服务器重启后自动恢复服务异常自动重启- 程序崩溃后自动重新启动集中日志管理- 所有输出都保存到指定文件方便排查问题统一管理接口- 通过supervisorctl命令管理所有服务8.1 核心要点回顾Supervisor是一个进程管理工具可以监控和管理后台服务的运行关键配置参数autostart实现开机自启autorestart实现异常重启配置文件位置/etc/supervisor/conf.d/目录下每个服务一个.conf文件管理命令通过supervisorctl可以查看状态、启动、停止、重启服务日志查看所有日志都保存在/var/log/supervisor/目录下8.2 下一步建议监控告警可以配置日志监控当服务异常时发送邮件或短信通知性能监控结合其他工具监控服务的CPU、内存、GPU使用情况多实例部署如果流量较大可以考虑部署多个实例并通过Nginx做负载均衡备份策略定期备份Supervisor配置和日志文件8.3 最后的小提示修改配置文件后一定要执行sudo supervisorctl update让配置生效定期检查日志文件了解服务的运行状况重要的配置变更前先备份原有的配置文件如果遇到问题先看日志大多数问题都能在日志中找到答案现在你的Nanbeige4.1-3B服务已经可以稳定运行了。无论服务器重启还是程序异常Supervisor都会自动帮你恢复服务让你可以更专注于模型的使用和优化而不是基础运维。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。