Files
012-kaopeilian/backend/scripts/check_backup_status.sh
111 998211c483 feat: 初始化考培练系统项目
- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
2026-01-24 19:33:28 +08:00

124 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
# 考陪练系统数据库备份状态检查脚本
# 作者: AI Assistant
# 日期: 2025-09-23
BACKUP_DIR="/root/aiedu/kaopeilian-backend/backups"
LOG_FILE="${BACKUP_DIR}/check_status.log"
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "${LOG_FILE}"
}
# 检查最近的备份文件
check_recent_backup() {
local recent_backup=$(find "${BACKUP_DIR}" -name "kaopeilian_backup_*.sql.gz" -type f -mtime -1 | sort | tail -1)
if [ -n "${recent_backup}" ]; then
local backup_time=$(stat -c %Y "${recent_backup}")
local current_time=$(date +%s)
local time_diff=$((current_time - backup_time))
local hours_diff=$((time_diff / 3600))
log "最近备份: $(basename ${recent_backup})"
log "备份时间: $(stat -c %y "${recent_backup}")"
log "距离现在: ${hours_diff} 小时前"
if [ ${hours_diff} -gt 2 ]; then
log "WARNING: 备份文件超过2小时未更新"
return 1
else
log "备份状态: 正常"
return 0
fi
else
log "ERROR: 未找到最近的备份文件"
return 1
fi
}
# 检查备份文件大小
check_backup_size() {
local recent_backup=$(find "${BACKUP_DIR}" -name "kaopeilian_backup_*.sql.gz" -type f -mtime -1 | sort | tail -1)
if [ -n "${recent_backup}" ]; then
local backup_size=$(stat -c %s "${recent_backup}")
local backup_size_mb=$((backup_size / 1024 / 1024))
log "备份文件大小: ${backup_size_mb}MB"
if [ ${backup_size_mb} -lt 1 ]; then
log "WARNING: 备份文件过小,可能不完整"
return 1
else
log "备份文件大小: 正常"
return 0
fi
fi
}
# 检查定时任务状态
check_cron_status() {
if crontab -l | grep -q "backup_database.sh"; then
log "定时任务: 已配置"
return 0
else
log "ERROR: 定时任务未配置"
return 1
fi
}
# 检查systemd定时器状态
check_systemd_timer() {
if systemctl is-active kaopeilian-backup.timer >/dev/null 2>&1; then
log "Systemd定时器: 运行中"
# 获取下次执行时间
local next_run=$(systemctl list-timers kaopeilian-backup.timer --no-pager | grep kaopeilian-backup.timer | awk '{print $1, $2}')
log "下次执行时间: ${next_run}"
return 0
else
log "ERROR: Systemd定时器未运行"
return 1
fi
}
# 检查Docker容器状态
check_docker_container() {
if docker ps | grep -q "kaopeilian_mysql"; then
log "MySQL容器: 运行中"
return 0
else
log "ERROR: MySQL容器未运行"
return 1
fi
}
# 主检查函数
main() {
log "========== 备份状态检查开始 =========="
local exit_code=0
# 执行各项检查
check_recent_backup || exit_code=1
check_backup_size || exit_code=1
check_cron_status || exit_code=1
check_systemd_timer || exit_code=1
check_docker_container || exit_code=1
if [ ${exit_code} -eq 0 ]; then
log "========== 备份状态检查完成: 全部正常 =========="
else
log "========== 备份状态检查完成: 发现问题 =========="
fi
return ${exit_code}
}
# 执行主函数
main "$@"