feat(backup-monitor): integrate notify_backup.rb into desktop backup.sh
This commit is contained in:
parent
476108980f
commit
cb2d6f6525
|
|
@ -0,0 +1,80 @@
|
|||
#!/usr/bin/env bash
|
||||
# restic backup: Synology SFTP (when reachable) + Backblaze B2 (always)
|
||||
set -euo pipefail
|
||||
|
||||
source "$HOME/.credentials"
|
||||
|
||||
LOG_DIR="$HOME/.local/log/restic"
|
||||
mkdir -p "$LOG_DIR"
|
||||
LOG="$LOG_DIR/$(date +%Y-%m-%d).log"
|
||||
|
||||
EXCLUDES=(
|
||||
--exclude-file="$HOME/.config/restic/excludes"
|
||||
--exclude-caches
|
||||
)
|
||||
|
||||
run_backup() {
|
||||
local repo="$1"
|
||||
local label="$2"
|
||||
|
||||
echo "--- $label backup ---" | tee -a "$LOG"
|
||||
|
||||
restic -r "$repo" backup ~ "${EXCLUDES[@]}" \
|
||||
--one-file-system \
|
||||
--tag "$(hostname)" 2>&1 | tee -a "$LOG"
|
||||
|
||||
restic -r "$repo" forget \
|
||||
--keep-daily 7 \
|
||||
--keep-weekly 4 \
|
||||
--keep-monthly 6 \
|
||||
--prune 2>&1 | tee -a "$LOG"
|
||||
}
|
||||
|
||||
run_and_notify() {
|
||||
local repo="$1"
|
||||
local label="$2"
|
||||
local machine="$3"
|
||||
local destination="$4"
|
||||
|
||||
set +e
|
||||
run_backup "$repo" "$label"
|
||||
local exit_code=$?
|
||||
set -e
|
||||
|
||||
local status="failure"
|
||||
[[ $exit_code -eq 0 ]] && status="success"
|
||||
|
||||
local snap
|
||||
snap=$(grep -oE 'snapshot [a-f0-9]+' "$LOG" 2>/dev/null | tail -1 | awk '{print $2}')
|
||||
|
||||
notify_backup.rb \
|
||||
--machine "$machine" \
|
||||
--destination "$destination" \
|
||||
--status "$status" \
|
||||
${snap:+--snapshot "$snap"} \
|
||||
--log-path "$LOG" \
|
||||
--notes "$(tail -10 "$LOG")" || true
|
||||
|
||||
return $exit_code
|
||||
}
|
||||
|
||||
echo "=== Backup started $(date) ===" | tee -a "$LOG"
|
||||
|
||||
# Synology: attempt only if reachable (SSH key auth, 30s timeout for HDD spin-up)
|
||||
if ssh -o ConnectTimeout=30 -o BatchMode=yes synology true 2>/dev/null; then
|
||||
run_and_notify "sftp:${SYNOLOGY_HOST}:${SYNOLOGY_PATH}" "Synology" "desktop" "synology"
|
||||
else
|
||||
echo "Synology unreachable — skipping SFTP backup" | tee -a "$LOG"
|
||||
notify_backup.rb \
|
||||
--machine desktop \
|
||||
--destination synology \
|
||||
--status skipped \
|
||||
--log-path "$LOG" \
|
||||
--notes "Synology unreachable at $(date)" || true
|
||||
fi
|
||||
|
||||
# B2: clear any stale lock before attempting (safe no-op if no lock exists)
|
||||
restic -r "b2:${B2_BUCKET}:" unlock --remove-all 2>&1 | tee -a "$LOG"
|
||||
run_and_notify "b2:${B2_BUCKET}:" "Backblaze B2" "desktop" "backblaze-b2"
|
||||
|
||||
echo "=== Backup complete $(date) ===" | tee -a "$LOG"
|
||||
Loading…
Reference in New Issue