Files
ociflab-backup/README.md
2026-05-07 23:29:38 +08:00

2.8 KiB
Raw Permalink Blame History

OCIFLAB 备份脚本

功能

每天从 WHITELIST_REPO_URL 指定的仓库拉取 whitelist.md,解析其中的仓库列表进行备份:

  • 拉取不到时,自动使用前一天保存的白名单缓存作为兜底。
  • 超过 1/3 的仓库拉取/更新失败时,通过 server酱3 推送告警通知。
  • 白名单第一次拉取失败且无前一天缓存时,同样推送告警。
  • 对白名单中的仓库执行 git pull --ff-only(已有)或 git clone --depth 1新仓库pull 失败后自动回退为重新克隆。
  • 通过 Git Access TokenBearer 认证)访问仓库,不填 Token 则使用默认凭证。
  • 将所有仓库打包为 ociflab-backup-YYYYMMDD.zip,保留最近 7 天,过期自动清理。

依赖

工具 用途
bash 脚本运行环境
git 仓库克隆与更新、白名单仓库拉取
curl server酱推送
zip 打包压缩

配置

编辑脚本顶部的配置变量:

# Git Access Token用于认证不填则不使用
GIT_ACCESS_TOKEN=""

# 白名单仓库地址clone 后读取其中的 whitelist.md
WHITELIST_REPO_URL=""

# server酱3 配置(不填则跳过推送)
SERVERCHAN_UID=""          # 填写你的 UID
SERVERCHAN_SENDKEY=""      # 填写你的 SendKey

# 保留天数(默认 7 天)
RETENTION_DAYS=7

whitelist.md 文件结构

https://git.ociflab.icu/userA/projectA
https://git.ociflab.icu/userB/projectB

每行一个完整的仓库 HTTPS 地址。

使用

手动执行

chmod +x ociflab-backup.sh
./ociflab-backup.sh

定时执行crontab

每天凌晨 3 点自动运行,日志输出到文件:

crontab -e

添加:

0 3 * * * /bin/bash /path/to/ociflab-backup/ociflab-backup.sh >> /path/to/ociflab-backup/backup.log 2>&1

目录结构

ociflab-backup/
├── ociflab-backup.sh              # 主脚本
├── whitelist_repo/                # 白名单仓库 clone 位置
├── whitelist_cache.md             # 当天拉取的白名单缓存
├── whitelist_cache.md.yesterday   # 前一天缓存(兜底)
├── work/                          # 仓库克隆工作目录
├── archives/                      # zip 归档(保留 7 天)
│   ├── ociflab-backup-20260501.zip
│   └── ociflab-backup-20260502.zip
└── README.md

server酱3 告警

配置 SERVERCHAN_UIDSERVERCHAN_SENDKEY 后,以下场景会推送告警:

场景 标题示例
白名单拉取失败且无缓存 OCIFLAB备份失败
白名单为空 OCIFLAB备份失败
超 1/3 仓库失败 OCIFLAB备份异常 - 5/10 仓库失败

未配置 server酱 则仅输出日志,不推送。