memoryweave/scripts/restore.sh

124 lines
3.9 KiB
Bash
Executable File

#!/bin/bash
# ====== 织忆恢复脚本 ======
# 从 server Gitea 恢复所有数据
# 用法:./restore.sh [backup_date]
# backup_date: 可选,默认最新
set -e
BACKUP_DATE="${1:-latest}"
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
GITEA_BASE="http://192.168.123.11:3000/xiaoxue_admin"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ===== 开始恢复织忆 ====="
# 1. Clone 配置仓库
echo "[1/5] 拉取 Hermes 配置..."
if [ -d "${PROJECT_ROOT}/zhiyi-config" ]; then
cd "${PROJECT_ROOT}/zhiyi-config"
git pull origin main
else
git clone "${GITEA_BASE}/zhiyi-config.git" "${PROJECT_ROOT}/zhiyi-config"
fi
# 2. 恢复核心人格文件
echo "[2/5] 恢复人格文件..."
cp "${PROJECT_ROOT}/zhiyi-config/SOUL.md" "${HOME}/.hermes/SOUL.md"
cp "${PROJECT_ROOT}/zhiyi-config/AGENTS.md" "${HOME}/.hermes/AGENTS.md"
cp "${PROJECT_ROOT}/zhiyi-config/MEMORY.md" "${HOME}/.hermes/MEMORY.md"
cp "${PROJECT_ROOT}/zhiyi-config/USER.md" "${HOME}/.hermes/USER.md"
echo " 人格文件恢复完成"
# 3. 恢复配置文件
echo "[3/5] 恢复配置文件..."
[ -f "${PROJECT_ROOT}/zhiyi-config/config.yaml" ] && \
cp "${PROJECT_ROOT}/zhiyi-config/config.yaml" "${HOME}/.hermes/config.yaml"
[ -f "${PROJECT_ROOT}/zhiyi-config/.env" ] && \
cp "${PROJECT_ROOT}/zhiyi-config/.env" "${HOME}/.hermes/.env"
[ -f "${PROJECT_ROOT}/zhiyi-config/auth.json" ] && \
cp "${PROJECT_ROOT}/zhiyi-config/auth.json" "${HOME}/.hermes/auth.json"
echo " 配置文件恢复完成"
# 4. 恢复 skills / cron
echo "[4/5] 恢复 skills 和 cron..."
[ -d "${PROJECT_ROOT}/zhiyi-config/skills" ] && \
rsync -a "${PROJECT_ROOT}/zhiyi-config/skills/" "${HOME}/.hermes/skills/"
[ -d "${PROJECT_ROOT}/zhiyi-config/cron" ] && \
rsync -a "${PROJECT_ROOT}/zhiyi-config/cron/" "${HOME}/.hermes/cron/"
[ -f "${PROJECT_ROOT}/zhiyi-config/kanban.db" ] && \
cp "${PROJECT_ROOT}/zhiyi-config/kanban.db" "${HOME}/.hermes/kanban.db"
echo " skills/cron 恢复完成"
# 5. 恢复织忆数据
echo "[5/5] 恢复织忆数据..."
# Clone 数据仓库(如果需要)
if [ ! -d "${PROJECT_ROOT}/zhiyi-backup" ]; then
git clone "${GITEA_BASE}/zhiyi-backup.git" "${PROJECT_ROOT}/zhiyi-backup"
fi
cd "${PROJECT_ROOT}/zhiyi-backup"
# 找最新备份
if [ "${BACKUP_DATE}" = "latest" ]; then
BACKUP_FILE=$(ls -t *.tar.gz 2>/dev/null | head -1)
else
BACKUP_FILE="zhiyi_backup_${BACKUP_DATE}.tar.gz"
fi
if [ -n "${BACKUP_FILE}" ] && [ -f "${BACKUP_FILE}" ]; then
echo " 使用备份: ${BACKUP_FILE}"
# 解压到临时目录
TMP_DIR="/tmp/zhiyi_restore_$$"
mkdir -p "${TMP_DIR}"
tar -xzf "${BACKUP_FILE}" -C "${TMP_DIR}"
DATA_DIR=$(ls -d "${TMP_DIR}"/zhiyi_backup_* 2>/dev/null | head -1)
if [ -n "${DATA_DIR}" ] && [ -d "${DATA_DIR}/memoryweave" ]; then
sudo rsync -a "${DATA_DIR}/memoryweave/" /var/lib/memoryweave/
sudo chown -R root:root /var/lib/memoryweave/
echo " 数据恢复完成: $(du -sh /var/lib/memoryweave/ | cut -f1)"
else
echo " ERROR: 备份格式错误,无法恢复"
fi
rm -rf "${TMP_DIR}"
else
echo " WARN: 未找到备份文件 ${BACKUP_FILE},跳过数据恢复"
fi
# 6. 重启服务
echo ""
echo "[完成] 准备重启服务..."
# 检查 zhiyi 进程
if pgrep -f "zhiyi" > /dev/null; then
echo " 重启 zhiyi..."
pkill -f "zhiyi" 2>/dev/null || true
sleep 2
fi
# 启动 zhiyi
cd "${PROJECT_ROOT}/go"
if [ -f "./zhiyi" ]; then
nohup ./zhiyi >> "${HOME}/.hermes/logs/zhiyi.log" 2>&1 &
sleep 3
else
echo " WARN: zhiyi binary 不存在,需要重新编译"
fi
# 7. 健康检查
echo ""
echo "健康检查..."
sleep 2
if curl -s http://localhost:7821/health > /dev/null 2>&1; then
echo "✓ 织忆服务正常"
else
echo "✗ 织忆服务异常,请检查日志"
tail -20 "${HOME}/.hermes/logs/zhiyi.log" 2>/dev/null || true
fi
echo ""
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ===== 恢复完成 ====="