Files
everythingbutwork/scripts/backup-loop.sh
T
Raffael SheikhandClaude Opus 4.8 7285ed9cae Backup-Sidecar: täglicher pg_dump scharf geschaltet
Das dokumentierte Backup lief real nie (stock postgres-Image ohne Cron,
backup.sh nirgends eingebunden) -> bei Volume-/Disk-Verlust drohte Totalverlust.

- Neuer service "backup" (docker-compose.yml): postgres:16-alpine als Sidecar,
  taeglicher pg_dump um BACKUP_HOUR (Default 03:00 Europe/Berlin)
- backup-loop.sh: abhaengigkeitsfreier Tages-Scheduler (umgeht busybox-cron-
  Environment-Eigenheiten)
- backup.sh korrigiert: laeuft remote gegen PGHOST mit PGPASSWORD; -Fc statt
  "-Fc | gzip" (war doppelt komprimiert und als .sql.gz nicht restore-bar) -> .dump
- BACKUP_HOUR/BACKUP_RETENTION_DAYS konfigurierbar (.env.example)
- operations.md: Backup-/Restore-Anleitung an Ist-Zustand angepasst

Verifiziert: pg_dump erstellt + pg_restore in frische DB, Daten intakt.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 11:09:38 +02:00

20 lines
725 B
Bash
Executable File

#!/bin/sh
# Minimaler Tages-Scheduler für den Backup-Sidecar: führt backup.sh einmal
# täglich zur Stunde BACKUP_HOUR (Container-TZ = Europe/Berlin) aus.
#
# Bewusst kein cron: ein simpler Poll-Loop erbt das Container-Environment
# zuverlässig (POSTGRES_PASSWORD u. a.) und hat keine busybox-cron-Eigenheiten.
set -eu
HOUR="${BACKUP_HOUR:-03}"
echo "Backup-Sidecar aktiv — täglich um ${HOUR}:00 (TZ=${TZ:-UTC}), Retention ${BACKUP_RETENTION_DAYS:-14} Tage."
while true; do
if [ "$(date +%H)" = "$HOUR" ] && [ "$(date +%M)" = "00" ]; then
/usr/local/bin/backup.sh || echo "Backup fehlgeschlagen (Exit $?)" >&2
sleep 61 # diese Minute überspringen, damit nicht doppelt ausgelöst wird
fi
sleep 30
done