Files
2026-05-23 13:31:08 +08:00

106 lines
3.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# reset-data.sh — 清空 moziplus v2 运行数据(保留配置)
set -euo pipefail
TARGET_DIR="${MOZIPLUS_V2_DIR:-$HOME/.sanguo_projects/sanguo_moziplus_v2}"
PM2_NAME="sanguo-moziplus-v2"
CONFIRM=false
PROJECT_FILTER=""
usage() {
echo "Usage: $0 [options]"
echo ""
echo "Options:"
echo " --target=DIR 安装目标目录"
echo " --project=NAME 只清指定项目数据(可多次使用,逗号分隔)"
echo " --confirm 确认执行(必须传)"
echo " -h, --help 显示帮助"
echo ""
echo "Examples:"
echo " $0 --confirm # 清空所有数据"
echo " $0 --project=demo --confirm # 只清 demo 项目"
echo " $0 --project=demo,test --confirm # 清 demo 和 test 项目"
exit 0
}
for arg in "$@"; do
case "$arg" in
--target=*) TARGET_DIR="${arg#*=}" ;;
--project=*) PROJECT_FILTER="${arg#*=}" ;;
--confirm) CONFIRM=true ;;
-h|--help) usage ;;
esac
done
if [ "$CONFIRM" = false ]; then
echo "⚠️ This will delete running data! Use --confirm to proceed."
echo ""
if [ -n "$PROJECT_FILTER" ]; then
echo " Would delete data for project(s): $PROJECT_FILTER"
else
echo " Would delete ALL project data (keeping config/)"
fi
exit 1
fi
DATA_DIR="$TARGET_DIR/data"
if [ ! -d "$DATA_DIR" ]; then
echo "❌ Data directory not found: $DATA_DIR" && exit 1
fi
# ── 停服务 ──
echo "🛑 Stopping $PM2_NAME..."
pm2 stop "$PM2_NAME" 2>/dev/null || true
# 确保 trap 恢复服务
cleanup() {
echo ""
echo "▶️ Ensuring $PM2_NAME is running..."
pm2 restart "$PM2_NAME" 2>/dev/null || pm2 start "$PM2_NAME" 2>/dev/null || true
}
trap cleanup EXIT
# ── 清数据 ──
echo ""
if [ -n "$PROJECT_FILTER" ]; then
# 指定项目
IFS=',' read -ra PROJECTS <<< "$PROJECT_FILTER"
for proj in "${PROJECTS[@]}"; do
proj=$(echo "$proj" | xargs) # trim
PROJ_DIR="$DATA_DIR/$proj"
if [ -d "$PROJ_DIR" ]; then
echo "🗑️ Deleting $proj data..."
rm -rf "$PROJ_DIR"
else
echo "⚠️ Project dir not found: $PROJ_DIR (skipped)"
fi
done
else
# 清空所有项目数据
echo "🗑️ Deleting all project data..."
find "$DATA_DIR" -mindepth 1 -maxdepth 1 -type d ! -name '_registry*' -exec rm -rf {} +
# 清 registry.db(会自动重建)
rm -f "$DATA_DIR/registry.db" "$DATA_DIR/registry.db-shm" "$DATA_DIR/registry.db-wal"
fi
# ── 清 inbox 和 logs ──
echo "🗑️ Cleaning inbox and logs..."
rm -f "$TARGET_DIR/inbox/"*.jsonl 2>/dev/null || true
rm -f "$TARGET_DIR/logs/"* 2>/dev/null || true
# ── 重启服务 ──(trap EXIT 也会执行,但这里显式做一次)
echo ""
echo "▶️ Starting $PM2_NAME..."
pm2 start "$PM2_NAME"
trap - EXIT # 清除 trap,避免重复执行
# ── 完成 ──
echo ""
if [ -n "$PROJECT_FILTER" ]; then
echo "✅ Project data reset: $PROJECT_FILTER"
else
echo "✅ All data reset (config preserved)"
fi
echo " URL: http://localhost:8083/"