69 lines
2.0 KiB
Bash
69 lines
2.0 KiB
Bash
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
# Configurable variables
|
|
REPO="borgbackup@192.168.1.184:/mnt/fileserver/borg"
|
|
NOTIFY_URL="https://ntfy.treehousefullofstars.com/backups"
|
|
SERVICES_FILE="/home/jadowyne/services.txt"
|
|
|
|
# Helper function to notify
|
|
ntfy_notify() {
|
|
curl -H "Title: Borg Backup" -d "$2: $1" "$NOTIFY_URL"
|
|
}
|
|
|
|
while IFS=';' read -r SERVICE SRVPATH; do
|
|
# Skip blank or comment lines
|
|
[[ "$SERVICE" =~ ^#.*$ || -z "$SERVICE" ]] && continue
|
|
|
|
echo "=== Backing up $SERVICE ==="
|
|
PARENT_DIR="$(dirname "$SRVPATH")"
|
|
FOLDER_NAME="$(basename "$SRVPATH")"
|
|
SECONDS=0
|
|
|
|
cd "$SRVPATH" || {
|
|
ntfy_notify "$SERVICE: Cannot cd to $SRVPATH" "Error"
|
|
continue
|
|
}
|
|
|
|
# Shutdown service
|
|
docker compose down
|
|
sleep 5
|
|
|
|
if docker compose ps | grep -q 'Up'; then
|
|
ntfy_notify "$SERVICE: Failed to shut down containers" "Error"
|
|
continue
|
|
fi
|
|
|
|
cd "$PARENT_DIR" || { echo "Could not cd to $PARENT_DIR"; continue; }
|
|
|
|
# Run Borg backup
|
|
ARCHIVE="$SERVICE-$(date +%Y-%m-%d_%H-%M-%S)"
|
|
BORG_PASSPHRASE='Jumbocarrot&001' borg create --compression zstd,6 "$REPO::$ARCHIVE" "$FOLDER_NAME"
|
|
|
|
BORG_PASSPHRASE='Jumbocarrot&001' borg prune --prefix "${SERVICE}-" --keep-last=4 "$REPO"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
cd "$SRVPATH" || {
|
|
ntfy_notify "$SERVICE: Cannot cd to $SRVPATH" "Error"
|
|
continue
|
|
}
|
|
# Start service back up
|
|
docker compose up -d
|
|
|
|
ELAPSED="$SECONDS"
|
|
MIN=$((ELAPSED/60))
|
|
SEC=$((ELAPSED%60))
|
|
|
|
if docker compose ps | grep -q 'Up'; then
|
|
ntfy_notify "$SERVICE backed up and restarted successfully in ${MIN}m ${SEC}s" "Success"
|
|
else
|
|
ntfy_notify "$SERVICE backup successful, but failed to restart service in ${MIN}m ${SEC}s" "Error"
|
|
fi
|
|
else
|
|
ntfy_notify "$SERVICE backup FAILED (see logs)" "Error"
|
|
# Consider starting the service anyway
|
|
docker compose up -d
|
|
fi
|
|
|
|
done < "$SERVICES_FILE" |