basic functionality
This commit is contained in:
87
app/backup.sh
Executable file
87
app/backup.sh
Executable 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
|
||||
Reference in New Issue
Block a user