89 lines
1.8 KiB
Bash
Executable File
89 lines
1.8 KiB
Bash
Executable File
#! /usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
### DEFAULTS ###
|
|
|
|
BACKUP_SOURCE="/mnt/backup"
|
|
|
|
### CHECK REQUIRED ENV VARS ###
|
|
|
|
REQ_VARS=(
|
|
"PBS_SERVER"
|
|
"PBS_DATASTORE"
|
|
"PBS_BACKUP_ID"
|
|
"PBS_PASSWORD"
|
|
)
|
|
|
|
for var in "${REQ_VARS[@]}"; do
|
|
if [[ -z "${!var:-}" ]]; then
|
|
echo "ERROR: Required environment variable '$var' is not set." >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
# Optional fingerprint
|
|
if [[ -n "${PBS_FINGERPRINT:-}" ]]; then
|
|
export PBS_FINGERPRINT
|
|
fi
|
|
|
|
export PBS_PASSWORD
|
|
|
|
|
|
|
|
### LOGGING SETUP ###
|
|
|
|
LOGFILE="/var/log/pbs-backup.log"
|
|
mkdir -p "$(dirname "$LOGFILE")"
|
|
|
|
log() {
|
|
# Log to stdout + file simultaneously, Docker-friendly
|
|
printf "%s\n" "$*" | tee -a "$LOGFILE" >/proc/1/fd/1
|
|
}
|
|
|
|
|
|
|
|
### BACKUP OPERATION ###
|
|
|
|
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
|
|
SNAPSHOT_NAME="backup-$TIMESTAMP"
|
|
|
|
log "==============================================="
|
|
log " Starting PBS Backup: $SNAPSHOT_NAME"
|
|
log " Source: $BACKUP_SOURCE"
|
|
log " Repository: $PBS_SERVER:$PBS_DATASTORE"
|
|
log " Backup ID: $PBS_BACKUP_ID"
|
|
log "==============================================="
|
|
|
|
proxmox-backup-client backup \
|
|
"$SNAPSHOT_NAME.pxar:$BACKUP_SOURCE" \
|
|
--repository "$PBS_SERVER:$PBS_DATASTORE" \
|
|
--backup-id "$PBS_BACKUP_ID" \
|
|
--all-file-systems true \
|
|
2>&1 | tee -a "$LOGFILE" >/proc/1/fd/1
|
|
|
|
log "--- Backup completed ---"
|
|
|
|
|
|
|
|
### PRUNE (optional) ###
|
|
|
|
PBS_PRUNE="${PBS_PRUNE:-false}"
|
|
PRUNE_ARGS="${PBS_PRUNE_ARGS:---keep-daily=7 --keep-weekly=4 --keep-monthly=3}"
|
|
|
|
if [[ "$PBS_PRUNE" == "true" ]]; then
|
|
log "--- Running prune ---"
|
|
|
|
proxmox-backup-client prune \
|
|
--repository "$PBS_SERVER:$PBS_DATASTORE" \
|
|
--backup-id "$PBS_BACKUP_ID" \
|
|
$PRUNE_ARGS \
|
|
2>&1 | tee -a "$LOGFILE" >/proc/1/fd/1
|
|
|
|
log "--- Prune completed ---"
|
|
else
|
|
log "--- Prune disabled ---"
|
|
fi
|
|
|
|
echo "=== Done ===" | tee -a
|