#!/bin/bash # ----------------------------------------------------------------------------------------------- # --------------------------------- Daily Sync Orchestrator ------------------------------------ # ----------------------------------------------------------------------------------------------- # Runs all bulk media shares sequentially. Scheduled via unRAID User Scripts plugin at 1am. # Per-share rsync handled by rsync.sh — this script tracks pass/fail and total time only. # ----------------------------------------------------------------------------------------------- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/../Master.conf" source "$SCRIPT_DIR/../common.sh" RSYNC_SCRIPT="$SCRIPT_DIR/../Rsync/rsync.sh" SHARES=( /mnt/user/Anime_Movies-Old /mnt/user/Anime_Shows-Old /mnt/user/Anime_Shows /mnt/user/Books /mnt/user/Intros /mnt/user/Kids_Movies /mnt/user/Kids_Tv_Shows /mnt/user/Movies /mnt/user/Music_Videos /mnt/user/Nextcloud /mnt/user/stand-up_comedy /mnt/user/Tv_Shows ) # ----------------------------------------------------------------------------------------------- # Duration Formatter # ----------------------------------------------------------------------------------------------- format_duration() { local secs=$1 local mins=$((secs / 60)) local rem=$((secs % 60)) [[ $mins -gt 0 ]] && echo "${mins}m${rem}s" || echo "${rem}s" } # ----------------------------------------------------------------------------------------------- # Tracking # ----------------------------------------------------------------------------------------------- PASS=() FAIL=() SHARE_TIMES=() TOTAL_START=$(date +%s) # ----------------------------------------------------------------------------------------------- # Run # ----------------------------------------------------------------------------------------------- echo "" echo "$ICON_SYNC Daily Sync Starting — $(date '+%Y-%m-%d %H:%M:%S')" echo "Shares: ${#SHARES[@]}" echo "" for SHARE in "${SHARES[@]}"; do SHARE_NAME=$(basename "$SHARE") SHARE_START=$(date +%s) echo "----------------------------------------" info "Syncing $SHARE_NAME..." echo "----------------------------------------" if bash "$RSYNC_SCRIPT" "$SHARE"; then SHARE_END=$(date +%s) SHARE_TIMES+=("$SHARE_NAME:$((SHARE_END - SHARE_START))") PASS+=("$SHARE_NAME") else SHARE_END=$(date +%s) SHARE_TIMES+=("$SHARE_NAME:$((SHARE_END - SHARE_START))") FAIL+=("$SHARE_NAME") error "$SHARE_NAME failed — continuing to next share" fi echo "" done TOTAL_END=$(date +%s) TOTAL_DURATION=$((TOTAL_END - TOTAL_START)) # ----------------------------------------------------------------------------------------------- # Summary # ----------------------------------------------------------------------------------------------- echo "===== DAILY SYNC SUMMARY =====" echo "Started: $(date -d @$TOTAL_START '+%Y-%m-%d %H:%M:%S')" echo "Finished: $(date -d @$TOTAL_END '+%Y-%m-%d %H:%M:%S')" echo "" for entry in "${SHARE_TIMES[@]}"; do SHARE_NAME="${entry%%:*}" DURATION="${entry##*:}" if printf '%s\n' "${FAIL[@]}" | grep -qx "$SHARE_NAME"; then echo " $ICON_ERROR $SHARE_NAME — $(format_duration $DURATION)" else echo " $ICON_SUCCESS $SHARE_NAME — $(format_duration $DURATION)" fi done echo "" echo " Passed: ${#PASS[@]}/${#SHARES[@]}" echo " Failed: ${#FAIL[@]}/${#SHARES[@]}" echo " Duration: $(format_duration $TOTAL_DURATION)" echo "==============================" [[ ${#FAIL[@]} -gt 0 ]] && exit 1 exit 0