22 lines
1.1 KiB
Bash
22 lines
1.1 KiB
Bash
#!/usr/bin/env bash
|
||
# I-02 本仓备份脚本:打包 PLANNING(任务资产)+ docs/e2e-proof(验证证据)→ 带 sha256 的归档。
|
||
# 不含任何密钥:只收 PLANNING + docs/e2e-proof;(服务器数据)/.env/docker.env 一律不碰。
|
||
set -euo pipefail
|
||
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||
STAMP="$(date +%Y%m%d-%H%M%S)"
|
||
OUT_DIR="$ROOT/backups"
|
||
mkdir -p "$OUT_DIR"
|
||
ARCHIVE="$OUT_DIR/planning-backup-$STAMP.tar.gz"
|
||
tar -czf "$ARCHIVE" -C "$ROOT" PLANNING docs/e2e-proof
|
||
sha256sum "$ARCHIVE" > "$ARCHIVE.sha256"
|
||
# 保留策略:只留最近 7 个归档
|
||
ls -1t "$OUT_DIR"/planning-backup-*.tar.gz 2>/dev/null | tail -n +8 | xargs -r rm -f
|
||
ls -1t "$OUT_DIR"/planning-backup-*.tar.gz.sha256 2>/dev/null | tail -n +8 | xargs -r rm -f
|
||
# 可选异地副本:设置 BACKUP_REMOTE_DIR(形如 user@host:/backups/planning)即同步,不设则跳过
|
||
if [ -n "${BACKUP_REMOTE_DIR:-}" ] && command -v rsync >/dev/null 2>&1; then
|
||
rsync -a "$OUT_DIR"/planning-backup-*.tar.gz "$OUT_DIR"/planning-backup-*.tar.gz.sha256 "$BACKUP_REMOTE_DIR/"
|
||
echo "offsite: $BACKUP_REMOTE_DIR"
|
||
fi
|
||
echo "backup: $ARCHIVE"
|
||
cat "$ARCHIVE.sha256"
|