每日备份 2026-06-10 12:57:13

This commit is contained in:
root-backup committed 2026-06-10 12:57:14 +08:00
1 parent fda2ccb8c2
commit 3d2e638c6a
244 files changed
+58890 -3

No files matched your search

+180
View File
@@ -0,0 +1,180 @@
#!/bin/bash
# =============================================
# /root 文件夹每日备份脚本
# 备份到 Gitea: http://192.168.0.33:3000
# 仓库: admin/my-project (分支: root-backup)
#
# 备份内容:系统配置文件、自定义脚本、项目配置等
# 排除:缓存、node_modules、大模型数据、浏览器数据等
# =============================================
BACKUP_DIR="/tmp/root-backup-$$"
REPO_URL="http://192.168.0.33:3000/admin/my-project.git"
LOG_FILE="/var/log/root-backup.log"
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
mkdir -p "$(dirname "$LOG_FILE")"
log() {
echo "[$TIMESTAMP] $1" | tee -a "$LOG_FILE"
}
cleanup() {
rm -rf "$BACKUP_DIR"
}
trap cleanup EXIT
# 克隆仓库
log "克隆仓库..."
rm -rf "$BACKUP_DIR"
no_proxy="$no_proxy,192.168.0.33" http_proxy="" https_proxy="" \
git clone --depth=1 "$REPO_URL" "$BACKUP_DIR" >> "$LOG_FILE" 2>&1 || {
log "克隆失败,退出"
exit 1
}
BACKUP_BRANCH="root-backup"
cd "$BACKUP_DIR"
git config user.name "root-backup"
git config user.email "backup@localhost"
# 切换到或创建备份分支
if git branch -a | grep -q "$BACKUP_BRANCH"; then
git checkout "$BACKUP_BRANCH" >> "$LOG_FILE" 2>&1
else
git checkout -b "$BACKUP_BRANCH" >> "$LOG_FILE" 2>&1
fi
# 清理旧内容(保留 .git)
find . -not -path './.git/*' -not -name '.git' -maxdepth 1 -mindepth 1 -exec rm -rf {} + 2>/dev/null
# 创建目录结构
mkdir -p config scripts project
# ---- 1. 备份系统配置文件 ----
# shell 配置
cp /root/.bashrc config/ 2>/dev/null
cp /root/.zshrc config/ 2>/dev/null
cp /root/.profile config/ 2>/dev/null
cp /root/.gitconfig config/ 2>/dev/null
cp /root/.selected_editor config/ 2>/dev/null
# ssh 配置(不含密钥本身,保留配置)
rsync -a --delete /root/.ssh/ config/ssh/ 2>/dev/null
# ---- 2. 备份自定义脚本 ----
rsync -a --delete /root/scripts/ scripts/ 2>/dev/null
# ---- 3. 工作目录配置(排除大型目录) ----
# 只备份 OpenClaw 的非代码配置文件
if [ -d /root/work/OpenClaw ]; then
mkdir -p project/OpenClaw
rsync -a --delete \
--exclude='node_modules' \
--exclude='.git' \
--exclude='.cursor' \
--exclude='__pycache__' \
--exclude='*.pyc' \
--include='*.json' \
--include='*.yaml' \
--include='*.yml' \
--include='*.toml' \
--include='*.md' \
--include='*.cfg' \
--include='*.ini' \
--include='*.env' \
--include='*.sh' \
--include='*.py' \
--include='Dockerfile*' \
--include='Makefile' \
--include='*.txt' \
--exclude='*' \
/root/work/OpenClaw/ project/OpenClaw/ 2>/dev/null
fi
# ---- 4. 备份重要的 openclaw 配置 ----
if [ -d /root/.openclaw ]; then
mkdir -p config/openclaw
rsync -a --delete \
--exclude='workspace' \
--exclude='browser' \
--exclude='memory' \
--exclude='backups' \
--exclude='logs' \
--exclude='agents' \
--exclude='media' \
--include='*/' \
--include='*.json' \
--include='*.yaml' \
--include='*.yml' \
--include='*.env' \
--include='*.sh' \
--include='*.md' \
--exclude='*' \
/root/.openclaw/ config/openclaw/ 2>/dev/null
fi
# ---- 5. 备份 seo 配置 ----
if [ -d /root/seo ]; then
rsync -a --delete \
--exclude='__pycache__' \
--exclude='*.pyc' \
--exclude='*.log' \
--exclude='evolution_cache' \
--exclude='.git' \
/root/seo/ seo/ 2>/dev/null
fi
# ---- 6. 备份 doc ----
if [ -d /root/doc ]; then
rsync -a --delete /root/doc/ doc/ 2>/dev/null
fi
# ---- 7. 备份其他工具 ----
if [ -d /root/tools ]; then
rsync -a --delete /root/tools/ tools/ 2>/dev/null
fi
# ---- 8. 备份 cron 任务列表 ----
crontab -l > config/crontab.txt 2>/dev/null
# ---- 9. 生成系统信息快照 ----
{
echo "# 系统信息快照"
echo "备份时间: $TIMESTAMP"
echo "主机名: $(hostname)"
echo "IP: $(ip addr show enp0s25 2>/dev/null | grep 'inet ' | awk '{print $2}')"
echo "内核: $(uname -r)"
echo "磁盘: $(df -h / | tail -1)"
echo ""
echo "## 已安装软件包"
dpkg -l 2>/dev/null | grep '^ii' | wc -l | xargs echo "Debian 包数量:"
echo ""
echo "## Docker 容器"
docker ps -a --format '{{.Names}} {{.Status}}' 2>/dev/null || echo "(无 docker)"
echo ""
echo "## 监听端口"
ss -tlnp 2>/dev/null | tail +2 || echo "(无数据)"
} > system-info.md 2>/dev/null
# 检查是否有变化
git add -A
if git diff --cached --quiet; then
log "没有变化,跳过备份"
exit 0
fi
# 显示变更摘要
CHANGED=$(git diff --cached --stat | tail -1)
CHANGE_COUNT=$(git diff --cached --numstat | wc -l)
log "变更: $CHANGE_COUNT 个文件"
# 提交并推送
git commit -m "每日备份 $TIMESTAMP"
log "推送至远端..."
no_proxy="$no_proxy,192.168.0.33" http_proxy="" https_proxy="" \
git push origin "$BACKUP_BRANCH" >> "$LOG_FILE" 2>&1
log "备份完成!"