summaryrefslogtreecommitdiff
path: root/restic_backup.sh
diff options
context:
space:
mode:
authorSam Scholten2025-09-11 16:06:10 +1000
committerSam Scholten2025-09-11 16:06:10 +1000
commita7115770e9e377689d9996abe32a28e8db87429d (patch)
tree27d08eb347a8b38aeb47b7eb51050a85ff4c7876 /restic_backup.sh
downloaddrestic-a7115770e9e377689d9996abe32a28e8db87429d.tar.gz
drestic-a7115770e9e377689d9996abe32a28e8db87429d.zip
init
Diffstat (limited to 'restic_backup.sh')
-rwxr-xr-xrestic_backup.sh61
1 files changed, 61 insertions, 0 deletions
diff --git a/restic_backup.sh b/restic_backup.sh
new file mode 100755
index 0000000..2ace329
--- /dev/null
+++ b/restic_backup.sh
@@ -0,0 +1,61 @@
+#!/bin/bash
+set -euo pipefail
+
+echo "--- Initializing Restic Backup Script ---"
+
+# Source environment variables if the file exists
+# This script expects RESTIC_ENV_FILE to be set in the environment
+# The environment file includes rclone throttling settings to prevent timeouts
+# shellcheck source=/dev/null
+if [ -f "$RESTIC_ENV_FILE" ]; then
+ source "$RESTIC_ENV_FILE"
+ echo "Environment variables loaded from $RESTIC_ENV_FILE"
+else
+ echo "Error: RESTIC_ENV_FILE not found. Please run setup.sh first." >&2
+ exit 1
+fi
+
+# Source common functions
+# shellcheck source=/dev/null
+source "$(dirname "$0")/common.sh"
+
+# --- Pre-warm rclone connection ---
+pre_warm_connection "Restic Backup"
+
+# --- Exit Trap ---
+# This will call notify with the script's final exit code upon termination.
+trap 'notify "Restic Backup ($(whoami)@$(hostname))" "Restic backup script finished with exit code $?" $?' EXIT
+
+# --- Main Backup Logic ---
+echo "--- Starting Restic Backup at $(date) ---"
+
+# Perform the Restic backup
+echo "Starting Restic backup to repository: $RESTIC_REPOSITORY"
+restic backup \
+ --repo "${RESTIC_REPOSITORY}" \
+ --files-from "${CONFIG_DIR}/paths" \
+ --exclude-file "${CONFIG_DIR}/excludes" \
+ --password-file "${RESTIC_PASSWORD_FILE}" \
+ --tag daily || {
+ echo "Error: Restic backup failed." >&2
+ notify "Restic Backup ($(whoami)@$(hostname))" "Backup phase failed!" 8
+ exit 1
+}
+
+# Prune old snapshots
+echo "Applying Restic retention policy and pruning old snapshots..."
+restic forget \
+ --repo "${RESTIC_REPOSITORY}" \
+ --password-file "${RESTIC_PASSWORD_FILE}" \
+ --keep-daily 7 \
+ --keep-weekly 4 \
+ --keep-monthly 6 \
+ --keep-yearly 6 \
+ --prune || {
+ echo "Error: Restic forget/prune failed." >&2
+ notify "Restic Backup ($(whoami)@$(hostname))" "Prune phase failed!" 8
+ exit 1
+}
+
+
+echo "--- Restic Backup finished at $(date) ---"