学生状态变更处理脚本
本项目包含用于处理学生退学、休学、复学、毕业状态变更的自动化脚本。
📋 脚本说明
脚本文件
process_student_changes.sh- 处理毕业、退学、休学的状态变更process_student_resume.sh- 处理复学的状态变更control_scripts.sh- 脚本控制程序(启动、停止、重启)start_services.sh- 一键启动所有服务stop_services.sh- 一键停止所有服务health_check.sh- 服务健康检查脚本data.conf- 数据库配置文件test_data.sql- 测试数据脚本optional_crontab_config.txt- 可选的定时任务配置(备用)demo.sh- 脚本使用演示
处理逻辑
毕业/退学/休学处理 (process_student_changes.sh)
处理类型:XIU_XUE(休学), TUI_XUE(退学), BI_YE(毕业)
执行步骤:
- 备份原始数据到his表
- 更新学生学籍状态
- 禁用用户账号
- 处理班级干部关系(取消现任职务)
- 处理社团成员关系(设置为已退出)
- 处理住宿关系(退学/毕业时退宿)
- 更新变更记录状态为已处理
复学处理 (process_student_resume.sh)
处理类型:FU_XUE(复学)
执行步骤:
- 备份原始数据到his表
- 更新学生学籍状态为复学
- 启用用户账号
- 更新变更记录状态为已处理
🔧 配置说明
data.conf 配置
# Database configuration
DB_HOST="localhost" # 数据库主机
DB_PORT="3306" # 数据库端口
DB_NAME="hzdyjs_xg" # 数据库名
DB_USER="root" # 数据库用户名
DB_PASS="password" # 数据库密码
# Script configuration
LOG_DIR="/var/log/student_status_change" # 日志目录
SCRIPT_DIR="/path/to/scripts" # 脚本目录
LOCK_FILE="${SCRIPT_DIR}/script.lock" # 锁文件
# Processing configuration
BATCH_SIZE=100 # 每次处理记录数
MAX_RETRY=3 # 最大重试次数
RETRY_DELAY=5 # 重试间隔(秒)
CYCLE_INTERVAL=600 # 循环间隔时间(秒),默认10分钟
🚀 使用方法
1. 配置数据库连接
编辑 data.conf 文件,设置正确的数据库连接信息:
DB_HOST="your_db_host"
DB_PORT="3306"
DB_NAME="hzdyjs_xg"
DB_USER="your_username"
DB_PASS="your_password"
2. 启动服务
脚本采用持续运行模式,启动后会自动循环处理:
# 启动所有服务(持续运行模式)
./start_services.sh
# 查看服务状态
./control_scripts.sh statusall
持续运行模式说明
- 启动方式:
./start_services.sh一次性启动所有服务 - 运行逻辑: 每个脚本启动后进入while循环,持续监控和处理数据
- 处理周期: 检查数据库 → 处理未处理记录 → 等待10分钟 → 重复循环
- 并发控制: 通过锁文件确保同一脚本只运行一个实例
- 自动重启: 如果脚本异常退出,可以通过控制脚本重启
3. 手动执行脚本(一次性)
如需手动执行单个脚本处理一次:
# 处理毕业/退学/休学(一次性执行)
./process_student_changes.sh
# 处理复学(一次性执行)
./process_student_resume.sh
4. 停止服务
# 正常停止所有服务
./stop_services.sh
# 强制停止所有服务(如果正常停止失败)
./stop_services.sh force
5. 健康检查
# 执行健康检查
./health_check.sh
# 执行检查并生成详细报告
./health_check.sh report
### 3. 使用控制脚本管理
```bash
# 启动指定脚本
./control_scripts.sh start changes # 启动状态变更处理脚本
./control_scripts.sh start resume # 启动复学处理脚本
# 停止指定脚本
./control_scripts.sh stop changes # 停止状态变更处理脚本
./control_scripts.sh stop resume # 停止复学处理脚本
# 重启指定脚本
./control_scripts.sh restart changes # 重启状态变更处理脚本
./control_scripts.sh restart resume # 重启复学处理脚本
# 查看脚本状态
./control_scripts.sh status changes # 查看状态变更处理脚本状态
./control_scripts.sh status resume # 查看复学处理脚本状态
# 批量操作
./control_scripts.sh startall # 启动所有脚本
./control_scripts.sh stopall # 停止所有脚本
./control_scripts.sh statusall # 查看所有脚本状态
📊 数据表说明
核心表
xg_student_status_change- 学生状态变更记录表process_status: 处理状态 (0=未处理,1=已处理)change_type: 变更类型 (XIU_XUE/TUI_XUE/FU_XUE/BI_YE)
业务表
xg_student_msg- 学生基本信息表sys_user- 系统用户表xg_class_pos_msg- 班级干部信息表club_member- 社团成员表stgl_member- 志愿者成员表xg_dorm_bed_student- 宿舍床位分配表xg_dorm_bed- 宿舍床位表
历史表
所有主表都有对应的his表用于数据备份:
xg_student_msg_hissys_user_hisxg_class_pos_msg_hisclub_member_hisstgl_member_hisxg_dorm_bed_student_his
📝 日志说明
日志文件位置
- 日志目录:
/var/log/student_status_change/ - 日志格式:
process_student_changes_YYYYMMDD_HHMMSS.log
日志内容
- 脚本启动/停止信息
- 数据库连接状态
- 每条记录的处理详情
- 错误信息和重试记录
- 处理结果统计
示例日志
[2025-01-01 10:00:00] [INFO] Starting student status change processing script
[2025-01-01 10:00:01] [INFO] Database connection successful
[2025-01-01 10:00:02] [INFO] Processing student change - ID: 123, Student: 20240001 (456), Type: TUI_XUE
[2025-01-01 10:00:03] [INFO] Successfully processed student change - ID: 123, Student: 20240001
[2025-01-01 10:00:03] [INFO] Processing completed - Processed: 1, Failed: 0
⚠️ 注意事项
安全提醒
- 数据备份: 脚本会自动备份数据到his表,但建议在运行前手动备份重要数据
- 权限控制: 确保运行脚本的用户有数据库操作权限
- 网络安全: 数据库密码等敏感信息请妥善保管
使用限制
- 并发控制: 同一脚本只允许一个实例运行(通过锁文件控制)
- 批量处理: 每次最多处理100条记录,避免数据库负载过高
- 错误重试: 处理失败时会自动重试,最多3次
监控建议
- 日志监控: 定期检查日志文件,关注错误信息
- 数据库监控: 监控数据库连接和性能
- 业务监控: 检查处理结果是否符合预期
- 健康检查: 使用
./health_check.sh脚本定期检查服务状态
🔧 故障排除
常见问题
-
数据库连接失败
- 检查
data.conf中的数据库配置 - 确认数据库服务正在运行
- 验证用户权限
- 检查
-
脚本重复运行
- 删除对应的锁文件:
rm -f script.lock - 检查是否有残留进程并终止
- 删除对应的锁文件:
-
处理失败
- 查看日志文件了解具体错误
- 检查数据库数据完整性
- 手动处理失败的记录
紧急停止
# 强制停止所有相关进程
pkill -f "process_student_changes.sh"
pkill -f "process_student_resume.sh"
# 清理锁文件
rm -f *.lock
rm -f pids/*.pid
📞 技术支持
如遇到问题,请:
- 查看日志文件获取详细错误信息
- 检查数据库连接和权限配置
- 确认相关数据表结构是否正确
- 联系技术支持团队
🔄 运行模式说明
持续运行模式(推荐)
脚本采用持续运行模式,启动后自动循环执行:
- 启动脚本:
./start_services.sh - 处理逻辑: 检查未处理的记录 → 处理业务 → 等待10分钟 → 重复
- 停止脚本:
./stop_services.sh
可选的定时任务模式
如果需要使用crontab模式(不推荐),参考 optional_crontab_config.txt 文件:
# 添加定时任务(仅在特殊情况下使用)
crontab -e
# 参考配置文件内容
运行模式对比
| 特性 | 持续运行模式 | Crontab模式 |
|---|---|---|
| 启动方式 | ./start_services.sh |
crontab配置 |
| 执行频率 | 每10分钟自动 | 可自定义时间 |
| 资源占用 | 常驻进程 | 按需启动 |
| 监控便利性 | 更容易监控 | 需要额外配置 |
| 维护复杂度 | 较低 | 较高 |
推荐使用持续运行模式,简单可靠,易于监控管理。
🚀 快速开始
💡 使用指南
- 查看演示: 运行
./demo.sh查看脚本使用说明 - 配置数据库: 编辑
data.conf配置数据库连接信息 - 启动服务: 使用
./start_services.sh启动持续运行的服务 - 监控运行: 使用
./health_check.sh检查服务状态 - 停止服务: 需要时使用
./stop_services.sh停止服务
🧪 测试步骤
- 插入测试数据: 执行
test_data.sql插入测试记录 - 启动服务:
./start_services.sh - 观察日志: 查看
/var/log/student_status_change/目录的日志 - 检查结果: 确认
xg_student_status_change.process_status已更新为1
最后更新: 2025-01-01 版本: v1.0.0