From 4c41df3e39a2c9992a9c04156447c293b007eeb5 Mon Sep 17 00:00:00 2001 From: ChuXun <70203584+ChuXunYu@users.noreply.github.com> Date: Thu, 29 Jan 2026 04:45:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9B=E5=BB=BA=20=E5=AE=8C=E6=95=B4?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E6=96=87=E6=A1=A3.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/完整使用文档.md | 996 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 996 insertions(+) create mode 100644 docs/完整使用文档.md diff --git a/docs/完整使用文档.md b/docs/完整使用文档.md new file mode 100644 index 0000000..3b96db3 --- /dev/null +++ b/docs/完整使用文档.md @@ -0,0 +1,996 @@ +# 成绩监控系统 - 完整使用文档 + +> **最后更新:** 2026-01-29 +> **版本:** v2.0 - 自动会话恢复版 + +--- + +## 📑 目录 + +1. [服务器部署指南](#服务器部署指南) +2. [快速更新指南](#快速更新指南) +3. [故障排查指南](#故障排查指南) +4. [常见问题解决](#常见问题解决) +5. [服务管理](#服务管理) +6. [历史BUG修复记录](#历史bug修复记录) + +--- + +# 服务器部署指南 + +## 📋 前置要求 + +- Linux服务器(Debian/Ubuntu/CentOS等) +- Python 3.7+ +- 服务器能访问外网 +- SSH访问权限 + +## 📦 项目文件说明 + +### 必需文件(需要上传到服务器) + +| 文件名 | 用途 | 何时使用 | +|--------|------|----------| +| `monitor.py` | **主程序** | 运行监控的核心文件 | +| `config.ini` | **配置文件** | 包含账号密码、邮箱配置(⚠️ 敏感文件) | +| `requirements.txt` | **Python依赖列表** | 安装Python包时使用 | +| `setup_python.sh` | **环境安装脚本** | 首次部署时执行,安装所有依赖 | +| `grade-monitor.service` | **systemd服务配置** | 设置开机自启和后台运行 | + +### 可选文件(参考文档) + +| 文件名 | 用途 | +|--------|------| +| `config(模板).ini` | 配置文件模板,新用户参考 | +| `README.md` | 项目说明文档 | +| `diagnose.sh` | 故障诊断脚本 | + +### 不需要的文件(不要上传) + +- `venv/` - 虚拟环境(服务器上重新创建) +- `.git/` - Git仓库(可选) +- `.last_*` - 运行时生成的缓存文件 +- `monitor.log` - 运行时生成的日志文件 + +## 🚀 部署步骤 + +### 第一步:准备文件 + +```bash +# 在本地打包必需文件(WSL或Git Bash) +cd /mnt/e/50425/Documents/Github/GPA_Monitoring + +# 创建压缩包(只包含必需文件) +tar -czf gpa_monitor.tar.gz \ + monitor.py \ + config.ini \ + requirements.txt \ + setup_python.sh \ + diagnose.sh \ + grade-monitor.service \ + README.md + +# 查看压缩包内容 +tar -tzf gpa_monitor.tar.gz +``` + +### 第二步:上传到服务器 + +```bash +# 方法1:使用 scp +scp gpa_monitor.tar.gz 用户名@服务器IP:/home/用户名/ + +# 方法2:使用 rsync(推荐) +rsync -avz gpa_monitor.tar.gz 用户名@服务器IP:/home/用户名/ + +# 方法3:使用 sftp +sftp 用户名@服务器IP +put gpa_monitor.tar.gz +exit +``` + +### 第三步:在服务器上解压并安装 + +```bash +# 登录到服务器 +ssh 用户名@服务器IP + +# 解压文件 +cd ~ +tar -xzf gpa_monitor.tar.gz +cd grade_monitor # 或者你解压到的目录 + +# 给脚本添加执行权限 +chmod +x setup_python.sh diagnose.sh + +# 运行安装脚本(会自动安装Python、创建虚拟环境、安装依赖) +./setup_python.sh +``` + +### 第四步:检查配置文件 + +```bash +# 编辑配置文件(如果需要修改) +nano config.ini + +# 确认配置正确: +# - USERNAME 和 PASSWORD(学号和密码) +# - 邮箱配置(SENDER_EMAIL、SENDER_PASSWORD、RECEIVER_EMAIL) +# - CHECK_INTERVAL(建议120秒以上) +``` + +配置文件示例: +```ini +[login] +USERNAME = 你的学号 +PASSWORD = 你的密码 +LOGIN_URL = ... +GRADE_URL = ... + +[email] +SENDER_EMAIL = your_email@163.com +SENDER_PASSWORD = SMTP授权码(不是邮箱密码!) +RECEIVER_EMAIL = 接收通知的邮箱 + +[monitor] +CHECK_INTERVAL = 120 # 建议120-300秒 +REQUEST_DELAY = 5 +MAX_RETRIES = 3 +RETRY_DELAY = 10 +``` + +### 第五步:测试运行 + +```bash +# 激活虚拟环境 +source venv/bin/activate + +# 测试运行(获取一次成绩,不进行监控) +python3 monitor.py --test + +# 查看提取的成绩 +cat .last_grade_content.txt +``` + +## 🔧 设置后台运行 + +### 方案A:使用 systemd(推荐,生产环境) + +**优点:** 开机自启、崩溃自动重启、系统化管理 + +```bash +# 1. 编辑服务文件,修改用户名和路径 +nano grade-monitor.service + +# 确保这些路径正确: +# User=你的用户名 +# WorkingDirectory=/home/你的用户名/grade_monitor +# ExecStart=/home/你的用户名/grade_monitor/venv/bin/python3 /home/你的用户名/grade_monitor/monitor.py + +# 2. 复制服务文件到系统目录 +sudo cp grade-monitor.service /etc/systemd/system/ + +# 3. 重新加载 systemd +sudo systemctl daemon-reload + +# 4. 启动服务 +sudo systemctl start grade-monitor + +# 5. 查看状态 +sudo systemctl status grade-monitor + +# 6. 设置开机自启 +sudo systemctl enable grade-monitor +``` + +**systemd 常用命令:** +```bash +# 启动 +sudo systemctl start grade-monitor + +# 停止 +sudo systemctl stop grade-monitor + +# 重启 +sudo systemctl restart grade-monitor + +# 查看状态 +sudo systemctl status grade-monitor + +# 查看日志 +sudo journalctl -u grade-monitor -f + +# 开机自启 +sudo systemctl enable grade-monitor + +# 禁用自启 +sudo systemctl disable grade-monitor +``` + +### 方案B:使用 tmux(简单易用) + +**优点:** 简单、可随时查看输出、适合测试阶段 + +```bash +# 1. 安装 tmux(如果没有) +sudo apt update && sudo apt install tmux + +# 2. 创建会话并运行 +tmux new -s grade_monitor +source venv/bin/activate +python3 monitor.py + +# 3. 离开会话(程序继续运行) +# 按 Ctrl+B,然后按 D + +# 4. 重新连接查看 +tmux attach -t grade_monitor + +# 5. 查看所有会话 +tmux ls + +# 6. 关闭会话 +tmux kill-session -t grade_monitor +``` + +### 方案C:使用 nohup(最简单) + +**优点:** 快速、无需额外工具 + +```bash +# 后台运行 +source venv/bin/activate +nohup python3 monitor.py > output.log 2>&1 & + +# 查看进程 +ps aux | grep monitor.py + +# 停止程序 +pkill -f monitor.py +``` + +## 📊 监控和维护 + +### 查看日志 + +```bash +# 查看监控日志(程序自己的日志) +tail -f ~/grade_monitor/monitor.log + +# 查看最后100行 +tail -n 100 ~/grade_monitor/monitor.log + +# 搜索关键词 +grep "新增课程" ~/grade_monitor/monitor.log + +# 查看系统日志(如果用systemd) +sudo journalctl -u grade-monitor -f +sudo journalctl -u grade-monitor --since "1 hour ago" +``` + +### 检查运行状态 + +```bash +# 方法1:查看进程 +ps aux | grep monitor.py + +# 方法2:查看日志时间戳 +ls -lh ~/grade_monitor/monitor.log + +# 方法3:systemd状态(如果用systemd) +sudo systemctl status grade-monitor +``` + +## 🔒 安全建议 + +### 1. 保护配置文件 + +```bash +# 设置文件权限(只有所有者可读写) +chmod 600 config.ini + +# 查看权限 +ls -l config.ini +# 应该显示:-rw------- 1 用户名 用户名 +``` + +### 2. 不要上传敏感文件到 GitHub + +在 `.gitignore` 中添加: +``` +config.ini +*.log +.last_* +venv/ +``` + +### 3. 定期检查日志 + +```bash +# 检查是否有异常 +grep -i "error\|fail\|warning" monitor.log + +# 检查登录情况 +grep "登录" monitor.log | tail -20 +``` + +--- + +# 快速更新指南 + +## 🎯 本功能解决的问题 + +**症状:** 程序运行几小时后出现: +``` +[WARNING] 未能提取到成绩信息,返回原始文本 +[INFO] 成绩无变化(共 0 门课程) +``` + +**原因:** 登录会话过期,需要重新登录 + +**解决:** ✅ 最新版本已自动检测并重新登录 + +## 📦 更新方式 + +### 方式1:完整更新(推荐) + +#### 在本地准备 +```bash +# WSL或Git Bash中 +cd /mnt/e/50425/Documents/Github/GPA_Monitoring + +# 创建更新包 +tar -czf gpa_monitor.tar.gz \ + monitor.py \ + config.ini \ + requirements.txt \ + setup_python.sh \ + diagnose.sh \ + grade-monitor.service +``` + +#### 上传到服务器 +```bash +scp gpa_monitor.tar.gz 用户名@服务器IP:~/ +``` + +#### 在服务器上更新 +```bash +# 停止服务 +systemctl stop grade-monitor + +# 备份旧文件 +cd ~/grade_monitor +cp monitor.py monitor.py.backup.$(date +%Y%m%d) + +# 解压更新(会覆盖旧文件) +tar -xzf ~/gpa_monitor.tar.gz -C ~/grade_monitor + +# 赋予执行权限 +chmod +x diagnose.sh + +# 重启服务 +systemctl restart grade-monitor + +# 查看日志(确认自动重新登录功能) +tail -f monitor.log +``` + +### 方式2:仅更新主程序 + +如果只想更新 monitor.py: + +```bash +# 在本地(WSL) +cd /mnt/e/50425/Documents/Github/GPA_Monitoring +scp monitor.py 用户名@服务器IP:~/grade_monitor/ + +# 在服务器上 +systemctl stop grade-monitor +systemctl start grade-monitor +tail -f ~/grade_monitor/monitor.log +``` + +## ✅ 验证更新成功 + +查看日志,应该能看到: + +### 正常运行 +``` +[INFO] 开始新一轮检查 +[INFO] 获取成绩页面... +[DEBUG] 找到成绩表格 +[INFO] 成功提取成绩信息,共 17 行 +[INFO] 共解析到 15 门课程 +[INFO] 成绩无变化(共 15 门课程) +``` + +### 会话过期时自动处理 +``` +[WARNING] 检测到会话过期,尝试重新登录... +[INFO] 开始登录统一身份认证... +[INFO] 登录成功!成功访问成绩页面 +[INFO] 重新登录成功,继续监控 +``` + +## 💡 最佳实践 + +1. **定期检查日志**(每天1-2次即可) + ```bash + tail -n 50 ~/grade_monitor/monitor.log + ``` + +2. **不要频繁重启服务** + - 新版本会自动处理会话过期 + - 只在真正出问题时才重启 + +3. **保留备份** + ```bash + # 每次更新前都会自动备份 + ls -lh ~/grade_monitor/monitor.py.backup.* + ``` + +4. **合理设置检查间隔** + - 建议 120-300 秒 + - 避免触发学校系统限流 + +--- + +# 故障排查指南 + +## 🚨 问题一:"未能提取到成绩信息,共 0 门课程" + +### 症状 +日志中反复出现: +``` +[WARNING] 未能提取到成绩信息,返回原始文本 +[INFO] 成绩无变化(共 0 门课程) +``` + +### 快速诊断 + +#### 步骤1:运行诊断工具 +```bash +cd ~/grade_monitor +./diagnose.sh +``` + +诊断工具会自动: +- 检查 BeautifulSoup 是否安装 +- 运行测试模式 +- 分析测试结果 +- 提供修复建议 + +#### 步骤2:检查 BeautifulSoup 安装 +```bash +python3 -c "import bs4; print('BeautifulSoup4 已安装')" +``` + +如果报错,安装依赖: +```bash +pip3 install beautifulsoup4 +# 或完整安装所有依赖 +pip3 install -r requirements.txt +``` + +#### 步骤3:使用调试模式 +```bash +cd ~/grade_monitor +python3 monitor.py --test --debug +``` + +查看输出中是否有: +- ✅ "找到成绩表格" +- ✅ "找到 X 行成绩数据" +- ✅ "共解析到 X 门课程" + +#### 步骤4:检查是否登录失效 +```bash +grep "登录页面\|LOGIN_REQUIRED" ~/grade_monitor/monitor.log +``` + +如果有,重启服务重新登录: +```bash +systemctl restart grade-monitor +``` + +#### 步骤5:查看调试HTML文件 +```bash +cd ~/grade_monitor + +# 检查文件是否存在 +ls -lh debug_page.html + +# 查看是否包含成绩表格 +grep -i "gridtable\|课程名称\|成绩" debug_page.html | head -5 +``` + +### 解决方案 + +**方案1:重新安装依赖并重启** +```bash +cd ~/grade_monitor +pip3 install -r requirements.txt +systemctl restart grade-monitor +tail -f monitor.log +``` + +**方案2:启用调试模式监控** +```bash +# 编辑服务配置 +sudo nano /etc/systemd/system/grade-monitor.service + +# 修改 ExecStart 行添加 --debug 参数 +ExecStart=/usr/bin/python3 /home/yourusername/grade_monitor/monitor.py --debug + +# 重新加载并重启 +sudo systemctl daemon-reload +sudo systemctl restart grade-monitor +tail -f ~/grade_monitor/monitor.log +``` + +**方案3:如果是会话过期** +最新版本会自动处理!代码会: +1. 检测到 "LOGIN_REQUIRED" 时自动重新登录 +2. 记录日志:`[WARNING] 检测到会话过期,尝试重新登录...` +3. 重新登录后继续监控 + +**方案4:如果是网页结构变化** +程序会自动保存 HTML 到 `debug_page.html`,查看这个文件: +```bash +# 查看 HTML 内容,确认是否有成绩表格 +cat debug_page.html | grep -i "gridtable\|dataList" -A 10 +``` + +当前支持的表格选择器: +- `