SPB Git

spb/autoscholar

Public
1.0 KB · 17 lines shellscript
1#!/bin/bash2# Nightly backup: pg_dump (custom format) + artifact rsync to BACKUP_TARGET (user@host:dir). Keeps 7 daily + 4 weekly dumps locally.3set -euo pipefail4: "${DATABASE_URL:?}" "${ARTIFACT_ROOT:?}" "${BACKUP_TARGET:?}"5export PATH=/opt/homebrew/opt/postgresql@17/bin:/opt/homebrew/bin:/usr/bin:/bin6STAMP=$(date +%Y%m%d-%H%M)7LOCAL="${ARTIFACT_ROOT%/artifacts}/backups"; mkdir -p "$LOCAL/daily" "$LOCAL/weekly"8pg_dump --no-owner -Fc "$DATABASE_URL" > "$LOCAL/daily/autoscholar-$STAMP.dump"9if [ "$(date +%u)" = 7 ]; then cp "$LOCAL/daily/autoscholar-$STAMP.dump" "$LOCAL/weekly/"; fi10(ls -1t "$LOCAL/daily"/*.dump 2>/dev/null | tail -n +8 | xargs rm -f) || true11(ls -1t "$LOCAL/weekly"/*.dump 2>/dev/null | tail -n +5 | xargs rm -f) || true12shasum -a 256 "$LOCAL/daily/autoscholar-$STAMP.dump"13ssh -o BatchMode=yes "${BACKUP_TARGET%%:*}" "mkdir -p ${BACKUP_TARGET#*:}/dumps ${BACKUP_TARGET#*:}/artifacts"14rsync -a --delete "$LOCAL/daily/" "$BACKUP_TARGET/dumps/"15rsync -a "$ARTIFACT_ROOT/" "$BACKUP_TARGET/artifacts/"16echo "backup $STAMP ok → $BACKUP_TARGET"17
Files · 7be2efb9d9918665ab983911ef81775179db3565
Menu

Theme