#!/bin/sh # PostgreSQL-Backup für ATM10 Stats. # backup.sh once – ein Backup jetzt erstellen # backup.sh loop – täglich ein Backup, ältere als BACKUP_KEEP_DAYS (Standard 14) löschen # Erwartet PGHOST, PGUSER, PGDATABASE, PGPASSWORD (im Compose-Service gesetzt). set -u DIR=/backups KEEP="${BACKUP_KEEP_DAYS:-14}" # Each step checks its own result: inside "backup_once || …" the shell ignores set -e. backup_once() { file="$DIR/atm-$(date -u +%Y%m%dT%H%M%SZ).dump" if ! pg_dump --format=custom --file="$file.partial"; then rm -f "$file.partial" echo "backup: FAILED (pg_dump)" >&2 return 1 fi mv "$file.partial" "$file" || { echo "backup: FAILED (mv)" >&2; return 1; } find "$DIR" -name 'atm-*.dump' -mtime +"$KEEP" -delete echo "backup: $file ($(du -h "$file" | cut -f1))" } mkdir -p "$DIR" case "${1:-once}" in once) backup_once ;; loop) while true; do backup_once sleep 86400 done ;; *) echo "usage: backup.sh once|loop" >&2; exit 2 ;; esac