#!/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. # Add or remove shares in Master.conf under DAILY_SYNC_SHARES. # ----------------------------------------------------------------------------------------------- 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" # ----------------------------------------------------------------------------------------------- # --- $ICON_GEAR Setup --- # ----------------------------------------------------------------------------------------------- echo "" echo "--- $ICON_GEAR Setup ---" detect_hosts resolve_remote_ip # Single connectivity check upfront — fail fast before attempting all shares # against an unreachable host rather than failing per-share through the loop check_connectivity # ----------------------------------------------------------------------------------------------- # Tracking # ----------------------------------------------------------------------------------------------- PASS=() FAIL=() SHARE_TIMES=() TOTAL_START=$(date +%s) SHARE_COUNT=${#DAILY_SYNC_SHARES[@]} # ----------------------------------------------------------------------------------------------- # --- $ICON_SYNC Transfer --- # ----------------------------------------------------------------------------------------------- echo "" echo "--- $ICON_SYNC Daily Sync Starting — $(date '+%Y-%m-%d %H:%M:%S') ---" echo "Shares: $SHARE_COUNT" echo "" SHARE_INDEX=0 for SHARE in "${DAILY_SYNC_SHARES[@]}"; do SHARE_INDEX=$((SHARE_INDEX + 1)) SHARE_NAME=$(basename "$SHARE") SHARE_START=$(date +%s) echo "--- $ICON_SYNC Share $SHARE_INDEX of $SHARE_COUNT: $SHARE_NAME ---" 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)) # ----------------------------------------------------------------------------------------------- # --- $ICON_SUCCESS 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[@]}/$SHARE_COUNT" echo " Failed: ${#FAIL[@]}/$SHARE_COUNT" echo " Duration: $(format_duration $TOTAL_DURATION)" echo "==============================" [[ ${#FAIL[@]} -gt 0 ]] && exit 1 exit 0