Files
memoryweave/scripts/restore.sh
T
xiaowei 2a350cf781 fix(distill): max_tokens 800→1200 — Agnes推理token预算不足
Agnes 2.0-flash是推理模型,推理token占大量预算。
800仍不够→JSON截断(parse error: unexpected end of JSON input)。
1200确保推理+正文都够用。
2026-08-20 01:13:06 +08:00

96 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
# 织忆恢复脚本 — 从备份恢复数据
# 用法: ./restore.sh [backup_dir]
# backup_dir: 可选,如不填则列出可用备份供选择
set -e
BACKUP_ROOT="/home/muc/backups/memoryweave"
DATA_DIR="/var/lib/memoryweave"
STAMP=$(date +%Y%m%d-%H%M%S)
if [ -n "$1" ]; then
BACKUP_DIR="$1"
else
echo "=== 可用备份 ==="
backups=($(ls -t "$BACKUP_ROOT"/))
if [ ${#backups[@]} -eq 0 ]; then
echo "错误: 没有找到任何备份"
exit 1
fi
for i in "${!backups[@]}"; do
echo " [$i] ${backups[$i]}"
done
echo ""
read -p "选择备份 [0-${#backups[@]}-1]: " idx
BACKUP_DIR="$BACKUP_ROOT/${backups[$idx]}"
fi
if [ ! -d "$BACKUP_DIR" ]; then
echo "错误: 备份目录不存在: $BACKUP_DIR"
exit 1
fi
echo "[$STAMP] 织忆恢复开始..."
echo "[$STAMP] 使用备份: $BACKUP_DIR"
read -p "即将停止 zhiyid 并恢复数据,确认? [y/N]: " confirm
[ "$confirm" = "y" ] || { echo "取消"; exit 0; }
# 停止服务
echo "[$STAMP] 停止 zhiyid..."
systemctl --user stop zhiyid 2>/dev/null || sudo systemctl stop zhiyid 2>/dev/null || true
# 备份当前数据(出事前的快照)
CURRENT_BACKUP="$DATA_DIR/pre-restore-$STAMP"
echo "[$STAMP] 备份当前数据到: $CURRENT_BACKUP"
mkdir -p "$CURRENT_BACKUP"
cp -r "$DATA_DIR"/*.db "$DATA_DIR"/*.lance "$CURRENT_BACKUP/" 2>/dev/null || true
# 恢复 SQLite
for db in graph.db memoryweave.db; do
echo "[$STAMP] 恢复 $db..."
if [ -f "$BACKUP_DIR/$db" ]; then
cp "$BACKUP_DIR/$db" "$DATA_DIR/$db"
else
echo "[$STAMP] 警告: 备份中无 $db,跳过"
fi
done
# 恢复 LanceDB
echo "[$STAMP] 恢复 LanceDB 数据..."
if [ -f "$BACKUP_DIR/lance-data.tar.gz" ]; then
tar xzf "$BACKUP_DIR/lance-data.tar.gz" -C "$DATA_DIR"
else
echo "[$STAMP] 警告: 备份中无 lance-data.tar.gz,跳过"
fi
# 验证
echo "[$STAMP] 验证恢复..."
ok=true
for db in graph.db memoryweave.db; do
if [ -s "$DATA_DIR/$db" ]; then
echo "[$STAMP] $db: OK ($(du -sh "$DATA_DIR/$db" | cut -f1))"
else
echo "[$STAMP] $db: 失败"
ok=false
fi
done
for lance in episodes.lance memories.lance tombstones.lance; do
if [ -s "$DATA_DIR/$lance" ]; then
echo "[$STAMP] $lance: OK"
fi
done
# 重启
echo "[$STAMP] 重启 zhiyid..."
systemctl --user start zhiyid 2>/dev/null || sudo systemctl start zhiyid 2>/dev/null || true
sleep 2
# 健康检查
if curl -sf http://127.0.0.1:7821/health > /dev/null 2>&1; then
echo "[$STAMP] ✅ 恢复成功,zhiyid 健康检查通过"
else
echo "[$STAMP] ⚠️ zhiyid 未响应,请手动检查"
fi
echo "[$STAMP] 完成。当前数据快照已保存到: $CURRENT_BACKUP"