Files
memoryweave/scripts/backup.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

70 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
# 织忆每日备份脚本(由 cronjob 每天 04:00 调用)
# 直接执行备份,不走 Go HTTP API
set -e
API_KEY="zhiyi-dev-key-2026"
BACKUP_ROOT="/home/muc/backups/memoryweave"
DATA_DIR="/var/lib/memoryweave"
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
BACKUP_DIR="$BACKUP_ROOT/$TIMESTAMP"
echo "[$TIMESTAMP] 织忆备份开始..."
# 1. 创建备份目录
mkdir -p "$BACKUP_DIR"
# 2. SQLite graph.db 备份
echo "[$TIMESTAMP] 备份 graph.db..."
if ! sqlite3 "$DATA_DIR/graph.db" ".backup $BACKUP_DIR/graph.db"; then
echo "[$TIMESTAMP] ERROR: graph.db 备份失败"
exit 1
fi
# 3. SQLite memoryweave.db 备份
echo "[$TIMESTAMP] 备份 memoryweave.db..."
if ! sqlite3 "$DATA_DIR/memoryweave.db" ".backup $BACKUP_DIR/memoryweave.db"; then
echo "[$TIMESTAMP] ERROR: memoryweave.db 备份失败"
exit 1
fi
# 4. Redis 异步保存
echo "[$TIMESTAMP] 触发 Redis BGSAVE..."
redis-cli BGSAVE 2>/dev/null || true
# 5. LanceDB 目录 tar 打包(最多等 300s)
echo "[$TIMESTAMP] 打包 LanceDB 数据(可能需要 1-2 分钟)..."
if ! timeout 300 tar czf "$BACKUP_DIR/lance-data.tar.gz" \
-C "$DATA_DIR" episodes.lance memories.lance tombstones.lance; then
echo "[$TIMESTAMP] ERROR: LanceDB 打包超时或失败"
exit 1
fi
# 7. 清理旧备份(保留最近7天)
echo "[$TIMESTAMP] 清理过期备份..."
DELETED=0
for d in "$BACKUP_ROOT"/*/; do
[ -d "$d" ] || continue
age_days=$(($(date +%s) - $(stat -c %Y "$d") + 86399) / 86400)
if [ "$age_days" -gt 7 ]; then
rm -rf "$d"
echo "[$TIMESTAMP] 已删除过期备份: $d"
DELETED=$((DELETED + 1))
fi
done
echo "[$TIMESTAMP] 清理完成,删除了 $DELETED 个过期备份"
# 8. 验证
echo "[$TIMESTAMP] 验证备份..."
for f in graph.db memoryweave.db lance-data.tar.gz; do
if [ ! -s "$BACKUP_DIR/$f" ]; then
echo "[$TIMESTAMP] ERROR: $f 为空或不存在"
exit 1
fi
done
# 9. 打印结果
SIZE=$(du -sh "$BACKUP_DIR" | cut -f1)
echo "[$TIMESTAMP] 备份成功 | 路径: $BACKUP_DIR | 大小: $SIZE"
echo "[$TIMESTAMP] 织忆备份结果: OK | 路径: $BACKUP_DIR | 时间戳: $TIMESTAMP" > "$HOME/projects/memoryweave/backups/backup-$TIMESTAMP.log"