#!/bin/bash # Arrs Configuration Backup Script # Generated by Ansible - Do not edit manually set -euo pipefail # Configuration BACKUP_DIR="{{ backup_dir }}" TIMESTAMP=$(date +"%Y%m%d_%H%M%S") BACKUP_NAME="arrs_backup_${TIMESTAMP}" BACKUP_PATH="${BACKUP_DIR}/${BACKUP_NAME}" LOG_FILE="{{ docker_root }}/logs/backup.log" # Logging function log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" } # Create backup directory mkdir -p "$BACKUP_PATH" log "Starting Arrs backup: $BACKUP_NAME" # Stop services for consistent backup log "Stopping Arrs services..." cd {{ docker_compose_dir }} docker-compose stop # Backup configurations log "Backing up configurations..." {% for path in backup_paths %} if [ -d "{{ path }}" ]; then rsync -av "{{ path }}/" "$BACKUP_PATH/$(basename {{ path }})/" log "Backed up {{ path }}" fi {% endfor %} # Backup Docker Compose files log "Backing up Docker Compose configuration..." cp -r {{ docker_compose_dir }} "$BACKUP_PATH/compose" # Create backup metadata cat > "$BACKUP_PATH/backup_info.txt" << EOF Backup Date: $(date) Hostname: $(hostname) Docker User: {{ docker_user }} Media Root: {{ media_root }} Docker Root: {{ docker_root }} Backup Paths: {% for path in backup_paths %} - {{ path }} {% endfor %} EOF # Restart services log "Restarting Arrs services..." docker-compose up -d # Create compressed archive log "Creating compressed archive..." cd "$BACKUP_DIR" tar -czf "${BACKUP_NAME}.tar.gz" "$BACKUP_NAME" rm -rf "$BACKUP_NAME" # Set permissions chown {{ docker_user }}:{{ docker_group }} "${BACKUP_NAME}.tar.gz" log "Backup completed: ${BACKUP_NAME}.tar.gz" log "Backup size: $(du -h ${BACKUP_NAME}.tar.gz | cut -f1)" # Cleanup old backups log "Cleaning up old backups..." find "$BACKUP_DIR" -name "arrs_backup_*.tar.gz" -mtime +{{ backup_retention_days }} -delete log "Backup process finished successfully"