memoryweave/deploy/zhiyi-backup.sh

45 lines
1.3 KiB
Bash
Executable File

#!/bin/bash
# 织忆 MemoryWeave 每日备份脚本
# LanceDB checkpoint + SQLite .backup + Redis BGSAVE
# 保留最近 7 天每天 + 最近 4 周周日
set -euo pipefail
BACKUP_DIR="/backup/zhiyi"
DATE=$(date +%Y-%m-%d)
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
BACKUP_FILE="$BACKUP_DIR/backup-$DATE-$TIMESTAMP.tar.gz"
DATA_DIR="/var/lib/memoryweave"
mkdir -p "$BACKUP_DIR"
# 1. 调用 API 触发备份
echo "[backup] Triggering admin/backup API..."
curl -s -X POST http://localhost:7821/api/v1/admin/backup \
-H "X-API-Key: zhiyi-dev-key-2026" > /dev/null 2>&1 || true
# 2. LanceDB checkpoint + SQLite + Redis
echo "[backup] Creating archive..."
tar czf "$BACKUP_FILE" \
-C "$(dirname $DATA_DIR)" "$(basename $DATA_DIR)" \
2>/dev/null || true
# 3. Redis BGSAVE
echo "[backup] Redis BGSAVE..."
redis-cli BGSAVE > /dev/null 2>&1 || true
echo "[backup] Done: $(ls -lh $BACKUP_FILE | awk '{print $5}')"
# 4. 清理旧备份 — 保留最近 7 天 + 每周日的
echo "[backup] Pruning old backups..."
find "$BACKUP_DIR" -name "backup-*.tar.gz" -mtime +7 | while read f; do
DAY=$(basename "$f" | cut -d- -f2-4)
DOW=$(date -d "$DAY" +%u 2>/dev/null || echo "0")
if [ "$DOW" != "7" ]; then
rm -f "$f"
echo "[backup] Pruned: $(basename $f)"
fi
done
echo "[backup] All done."