124 lines
3.9 KiB
Bash
Executable File
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')] ===== 恢复完成 =====" |