basic functionality

This commit is contained in:
helmi
2025-11-27 00:49:42 +00:00
parent 9acedb73a7
commit 9f3686f466
6 changed files with 118 additions and 5 deletions

87
app/backup.sh Executable file
View File

@@ -0,0 +1,87 @@
#! /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" \
2>&1 | tee -a "$LOGFILE" >/proc/1/fd/1
log "--- Backup completed ---"
### PRUNE (optional) ###
PBS_PRUNE="${PBS_PRUNE:-true}"
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