#!/bin/bash set -e # ---------------------------------------------------------------------------------------------- # --------------------------------- Rsync Core Script ------------------------------------------ # ---------------------------------------------------------------------------------------------- # ---------------- User Variables, Please adjust in Master.conf as needed ---------------------- # ---------------------------------------------------------------------------------------------- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/../Master.conf" source "$SCRIPT_DIR/../common.sh" DIRECTORY="" RAW_ARGS=() for ARG in "$@"; do case "$ARG" in --*|*=*) RAW_ARGS+=("$ARG") ;; *) [[ -z "$DIRECTORY" ]] && DIRECTORY="$ARG" || RAW_ARGS+=("$ARG") ;; esac done parse_args "${RAW_ARGS[@]}" [[ -z "$DIRECTORY" ]] && error "Missing directory" && exit 1 detect_hosts resolve_remote_ip PROFILE_NAME=$(basename "$DIRECTORY" | tr '[:upper:]' '[:lower:]') MAX_RSYNC_PROCS=${PROFILE_MAX_PROCS[$PROFILE_NAME]:-$MAX_RSYNC_PROCS} BW_LIMIT=${PROFILE_BW_LIMIT[$PROFILE_NAME]:-$BW_LIMIT} RETRY_COUNT=${PROFILE_RETRY_COUNT[$PROFILE_NAME]:-$RETRY_COUNT} SLEEP=${PROFILE_SLEEP[$PROFILE_NAME]:-$SLEEP} CRITICAL_CONTAINER_NAMES="${PROFILE_CRITICAL_CONTAINER_NAMES[$PROFILE_NAME]}" DELAYED_CONTAINERS="${PROFILE_DELAYED_CONTAINERS[$PROFILE_NAME]}" CONTAINER_DELAY=${PROFILE_CONTAINER_DELAY[$PROFILE_NAME]:-$CONTAINER_DELAY} EXCLUDE_DIRS="${PROFILE_EXCLUDE_DIRS[$PROFILE_NAME]}" [[ "$SHOW_STATUS" == true ]] && show_status && exit 0 echo "$ICON_RUN Sync Starting" echo "Source: $DIRECTORY" echo "Remote: $REMOTE_SERVER:$DIRECTORY" echo "Profile: $PROFILE_NAME" wait_for_rsync stop_containers get_rsync_opts for ex in $EXCLUDE_DIRS; do RSYNC_OPTS+=(--exclude="$ex") done [[ "$DRY_RUN" == true ]] && RSYNC_OPTS+=("--dry-run") START=$(date +%s) for i in $(seq 1 "$RETRY_COUNT"); do if rsync "${RSYNC_OPTS[@]}" \ -e "ssh -i $SSH_KEY -T -o Compression=no -o IPQoS=throughput" \ "$DIRECTORY" "root@${REMOTE_SERVER}:$DIRECTORY"; then success "Rsync complete" break else warn "Rsync failed ($i/$RETRY_COUNT)" sleep "$SLEEP" fi done start_containers END=$(date +%s) echo "===== SUMMARY =====" echo "Directory: $DIRECTORY" echo "Profile: $PROFILE_NAME" echo "Duration: $((END-START))s" echo "Status: DONE" echo "==================="