106 lines
3.0 KiB
Bash
Executable File
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/"
|