![]() |
Automated backup solution - Printable Version +- Jellyfin Forum (https://forum.jellyfin.org) +-- Forum: Off Topic (https://forum.jellyfin.org/f-off-topic) +--- Forum: Self-hosting & Homelabs (https://forum.jellyfin.org/f-self-hosting-homelabs) +--- Thread: Automated backup solution (/t-automated-backup-solution) |
Automated backup solution - tim0502 - 2025-03-06 When using the following script you can automaticly create a backup and upload it to a remote location using rclone. You need to have rclone configured before you can use this script. Before use you need to edit to script to be used with your system. #!/bin/bash # Variables BACKUP_DIRS=("/var/lib/jellyfin" "/etc/jellyfin") # Directories to back up DEST_DIR="/mnt/data/backup-temp" # Local temp storage for ZIPs ONEDRIVE_FOLDER="Backup/Jellyfin" # Folder name in OneDrive MAX_BACKUPS=3 # Maximum number of backups to keep JELLYFIN_SERVICE="jellyfin" # Jellyfin service name # Timestamp format YYYYMMDD_HHMMSS TIMESTAMP=$(date +"%Y%m%d_%H%M%S") ZIP_FILE="$DEST_DIR/Jellyfin_backup_$TIMESTAMP.zip" # Ensure destination directory exists mkdir -p "$DEST_DIR" # Stop Jellyfin before backup echo "Stopping Jellyfin service..." sudo systemctl stop "$JELLYFIN_SERVICE" # Create a ZIP archive echo "Creating backup archive..." if zip -r "$ZIP_FILE" "${BACKUP_DIRS[@]}"; then echo "Backup created successfully: $ZIP_FILE" else echo "Backup creation failed!" sudo systemctl start "$JELLYFIN_SERVICE" exit 1 fi # Start Jellyfin after backup echo "Starting Jellyfin service..." sudo systemctl start "$JELLYFIN_SERVICE" # Upload to OneDrive using rclone export RCLONE_CONFIG=/home/tim/.config/rclone/rclone.conf echo "Uploading backup to OneDrive..." if rclone copy "$ZIP_FILE" onedrive:"$ONEDRIVE_FOLDER" --progress; then echo "Upload successful." rm "$ZIP_FILE" # Remove local ZIP after upload else echo "Upload failed!" exit 1 fi # Delete oldest backups if more than $MAX_BACKUPS exist echo "Checking for old backups to delete..." BACKUPS_ON_ONEDRIVE=$(rclone lsf onedrive:"$ONEDRIVE_FOLDER" | sort | head -n -$MAX_BACKUPS) for FILE in $BACKUPS_ON_ONEDRIVE; do echo "Deleting old backup: $FILE" rclone delete onedrive:"$ONEDRIVE_FOLDER/$FILE" done |