100 lines
2.9 KiB
Bash
Executable File
100 lines
2.9 KiB
Bash
Executable File
#!/bin/bash
|
|
# moziplus v2 E2E 测试恢复脚本(恢复出厂设置)
|
|
# 功能:从备份恢复数据 → 清理测试残留 → 重启服务
|
|
# 用法:bash scripts/e2e-restore.sh
|
|
|
|
set -e
|
|
|
|
DATA_DIR="$HOME/.sanguo_projects/sanguo_moziplus/data"
|
|
V2_DATA_DIR="$HOME/.sanguo_projects/sanguo_moziplus_v2/data"
|
|
BACKUP_DIR="$HOME/.sanguo_projects/sanguo_moziplus_v2/.e2e-backup"
|
|
REGISTRY="$V2_DATA_DIR/_registry.yaml"
|
|
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
|
|
|
echo "=== moziplus v2 恢复出厂设置 ==="
|
|
echo "时间: $(date)"
|
|
echo ""
|
|
|
|
# Step 1: 停止服务
|
|
echo "📦 [1/4] 停止 moziplus-v2 服务..."
|
|
pm2 stop sanguo-moziplus-v2 2>/dev/null && echo " ✅ 服务已停止" || echo " ⚠️ 服务未运行"
|
|
|
|
# Step 2: 查找最新备份
|
|
LATEST_BACKUP=$(ls -t "$BACKUP_DIR"/_registry.yaml.bak.* 2>/dev/null | head -1)
|
|
if [ -z "$LATEST_BACKUP" ]; then
|
|
echo "❌ 未找到备份数据,无法恢复"
|
|
echo " 将执行全新初始化..."
|
|
|
|
# 全新初始化:清理所有数据
|
|
echo "🧹 清理所有项目数据..."
|
|
for d in "$V2_DATA_DIR"/*/; do
|
|
dirname=$(basename "$d")
|
|
if [ "$dirname" != "_mail" ]; then
|
|
rm -rf "$d"
|
|
echo " 已删除: $dirname"
|
|
fi
|
|
done
|
|
|
|
# 重建干净注册表
|
|
echo "projects:" > "$REGISTRY"
|
|
echo " ✅ 注册表已重置"
|
|
|
|
# 重建 _mail DB
|
|
python3 -c "
|
|
from pathlib import Path
|
|
import sys
|
|
sys.path.insert(0, '$HOME/.sanguo_projects/sanguo_moziplus_v2')
|
|
from src.blackboard.db import init_db
|
|
init_db(Path('$V2_DATA_DIR/_mail/blackboard.db'))
|
|
print(' ✅ _mail DB 已重建')
|
|
"
|
|
|
|
echo ""
|
|
echo "=== 全新初始化完成 ==="
|
|
exit 0
|
|
fi
|
|
|
|
echo "📂 找到备份: $LATEST_BACKUP"
|
|
|
|
# Step 3: 恢复数据
|
|
echo "💾 [2/4] 恢复数据..."
|
|
|
|
# 恢复注册表
|
|
cp "$LATEST_BACKUP" "$REGISTRY"
|
|
echo " ✅ 注册表已恢复"
|
|
|
|
# 恢复 _mail DB
|
|
MAIL_BACKUP=$(ls -t "$BACKUP_DIR/_mail/"blackboard.db.bak.* 2>/dev/null | head -1)
|
|
if [ -n "$MAIL_BACKUP" ]; then
|
|
cp "$MAIL_BACKUP" "$V2_DATA_DIR/_mail/blackboard.db"
|
|
echo " ✅ _mail DB 已恢复"
|
|
fi
|
|
|
|
# 恢复 demo DB
|
|
DEMO_BACKUP=$(ls -t "$BACKUP_DIR/demo/"blackboard.db.bak.* 2>/dev/null | head -1)
|
|
if [ -n "$DEMO_BACKUP" ]; then
|
|
mkdir -p "$V2_DATA_DIR/demo"
|
|
cp "$DEMO_BACKUP" "$V2_DATA_DIR/demo/blackboard.db"
|
|
echo " ✅ demo DB 已恢复"
|
|
fi
|
|
|
|
# Step 4: 清理测试产生的项目
|
|
echo "🧹 [3/4] 清理测试产生的项目..."
|
|
for d in "$V2_DATA_DIR"/e2e-v27-*/; do
|
|
[ -d "$d" ] && rm -rf "$d" && echo " 已删除: $(basename $d)"
|
|
done
|
|
for d in "$V2_DATA_DIR"/e2e-routing-test/; do
|
|
[ -d "$d" ] && rm -rf "$d" && echo " 已删除: $(basename $d)"
|
|
done
|
|
for d in "$V2_DATA_DIR"/debug-task-*/; do
|
|
[ -d "$d" ] && rm -rf "$d" && echo " 已删除: $(basename $d)"
|
|
done
|
|
|
|
echo "🔄 [4/4] 重启 moziplus-v2 服务..."
|
|
pm2 restart sanguo-moziplus-v2 2>/dev/null && echo " ✅ 服务已重启" || echo " ⚠️ 重启失败,请手动检查"
|
|
|
|
echo ""
|
|
echo "=== 恢复完成 ==="
|
|
echo "服务状态:"
|
|
pm2 status sanguo-moziplus-v2 2>/dev/null || true
|