#!/bin/bash set -e # Exit on error trap 'echo "ERROR: An error occurred. Exiting."' ERR # Validate arguments if [ $# -lt 2 ]; then echo "Usage: $0 {backup|backup_wp_core|backup_uploads|backup_database|check_backup_repo|rotate_snapshots|create_snapshot|update_restic}" exit 1 fi # Extract ENV_NAME and COMMAND ENV_NAME="$1" COMMAND="$2" # Set dynamic configurations based on ENV_NAME LOG_FILE="/var/log/${ENV_NAME}_backup_script.log" BACKUP_REPO_PATH="/mnt/backups/${ENV_NAME}" PASSWORD_FILE="/etc/restic-password" # Validate ENV_NAME if [ -z "$ENV_NAME" ]; then echo "Error: ENV_NAME is not provided or empty." exit 1 fi # Ensure dynamic paths exist mkdir -p "$BACKUP_REPO_PATH" # Set environment variables export RESTIC_REPOSITORY="$BACKUP_REPO_PATH" export RESTIC_PASSWORD=$(cat "$PASSWORD_FILE") # Logging function log_message() { echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" } # Commands case "$COMMAND" in backup) log_message "Starting full backup for environment: $ENV_NAME" # Add logic to perform the full backup ;; backup_wp_core) log_message "Backing up WordPress core files for environment: $ENV_NAME" # Add logic for WordPress core backup ;; backup_uploads) log_message "Backing up WordPress uploads for environment: $ENV_NAME" # Add logic for uploads backup ;; backup_database) log_message "Backing up WordPress database for environment: $ENV_NAME" # Add logic for database backup ;; check_backup_repo) log_message "Checking backup repository for environment: $ENV_NAME" # Add repository check logic ;; rotate_snapshots) log_message "Rotating snapshots for environment: $ENV_NAME" # Add snapshot rotation logic ;; create_snapshot) log_message "Creating snapshot for environment: $ENV_NAME" # Add snapshot creation logic ;; update_restic) log_message "Updating Restic for environment: $ENV_NAME" restic self-update ;; *) echo "Invalid command: $COMMAND" echo "Usage: $0 {backup|backup_wp_core|backup_uploads|backup_database|check_backup_repo|rotate_snapshots|create_snapshot|update_restic}" exit 1 ;; esac