64 lines
1.6 KiB
Bash
Executable File
64 lines
1.6 KiB
Bash
Executable File
#!/usr/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
# Speicherort der Backups
|
|
BACKUP_ROOT="/var/backups"
|
|
|
|
# 30 Backups sollen behalten werden
|
|
RETAIN=30
|
|
|
|
# Postgres-Verbindung
|
|
PGHOST="localhost"
|
|
PGPORT="5432"
|
|
PGUSER="florian"
|
|
PGDATABASE="oqtane"
|
|
|
|
OQTANE_DIR="/home/konstantin/oqtane.framework/publish"
|
|
|
|
# Timestamp für den Ordnernamen
|
|
TS="$(date -u +'%Y%m%dT%H%M%SZ')"
|
|
DEST_DIR="${BACKUP_ROOT}/oqtane_${TS}"
|
|
|
|
########## Vorbereitung ##########
|
|
mkdir -p "$DEST_DIR"
|
|
|
|
echo "[$(date -Iseconds)] Starte Backup, Ziel: $DEST_DIR"
|
|
|
|
########## 1) Postgres-Backup ##########
|
|
# Voraussetzung: Passwortzugang über ~/.pgpass für den Benutzer,
|
|
# unter dem dieses Skript läuft.
|
|
|
|
# Dump nur der DB oqtane (Custom-Format)
|
|
pg_dump -h "localhost" -p "5432" -U "florian" -d "oqtane" -Fc \
|
|
-f "${DEST_DIR}/db_${PGDATABASE}.dump"
|
|
|
|
|
|
echo "[$(date -Iseconds)] Postgres-Backup fertig."
|
|
|
|
########## 2) Komplettes System-Backup ##########
|
|
# Achtung: sollte als root laufen, damit alle Dateien gelesen werden können.
|
|
|
|
tar -cvpzf "${DEST_DIR}/oqtane_files.tar.gz" \
|
|
--absolute-names "$OQTANE_DIR"
|
|
|
|
echo "[$(date -Iseconds)] Oqtane-Ordner gesichert."
|
|
|
|
########## 3) Rotation: nur die letzten $RETAIN Backups behalten ##########
|
|
shopt -s nullglob
|
|
backups=( "$BACKUP_ROOT"/* )
|
|
|
|
# Nach Ordnernamen (Timestamp) absteigend sortieren = neueste zuerst
|
|
IFS=$'\n' backups=( $(printf '%s\n' "${backups[@]}" | sort -r) )
|
|
unset IFS
|
|
|
|
if (( ${#backups[@]} > RETAIN )); then
|
|
echo "[$(date -Iseconds)] Zu viele Backups: ${#backups[@]} > $RETAIN. Lösche alte…"
|
|
for old in "${backups[@]:RETAIN}"; do
|
|
echo " Lösche $old"
|
|
rm -rf -- "$old"
|
|
done
|
|
fi
|
|
|
|
echo "[$(date -Iseconds)] Backup-Job abgeschlossen."
|