diff --git a/common.sh b/common.sh index 60bbe66..c218818 100644 --- a/common.sh +++ b/common.sh @@ -127,97 +127,4 @@ get_rsync_opts() { RSYNC_OPTS=("${DEFAULT_RSYNC_OPTS[@]}") log "Using default rsync options: ${RSYNC_OPTS[*]}" fi -} -3️⃣ rsync.sh - -Minimal user-facing echo + detailed logging via log: - -#!/bin/bash -set -e - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -# Load configs & helpers -source "$SCRIPT_DIR/../Master.conf" -source "$SCRIPT_DIR/../common.sh" - -# ----------------------------- Input ----------------------------- -DIRECTORY="$1" -if [[ -z "$DIRECTORY" ]]; then - echo "Usage: $0 [--dry-run] [VAR=value ...]" - exit 1 -fi -shift -parse_args "$@" - -# ----------------------------- Hosts & IP ----------------------------- -detect_hosts -resolve_remote_ip - -# ----------------------------- Profile ----------------------------- -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} -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} -RETRY_COUNT=${PROFILE_RETRY_COUNT[$PROFILE_NAME]:-$RETRY_COUNT} -SLEEP=${PROFILE_SLEEP[$PROFILE_NAME]:-$SLEEP} -EXCLUDE_DIRS=(${PROFILE_EXCLUDE_DIRS[$PROFILE_NAME]:-${EXCLUDE_DIRS[@]}}) - -echo "Detected profile: $PROFILE_NAME" -log "Profile settings: MAX_RSYNC_PROCS=$MAX_RSYNC_PROCS, BW_LIMIT=$BW_LIMIT, CONTAINERS=${CRITICAL_CONTAINER_NAMES[*]}, EXCLUDES=${EXCLUDE_DIRS[*]}, DRY_RUN=$DRY_RUN" - -# ----------------------------- Rsync Wait ----------------------------- -wait_for_rsync() { - for attempt in $(seq 1 "$RETRY_COUNT"); do - RSYNC_COUNT=$(pgrep -fc "rsync.*root@${REMOTE_SERVER}" || true) - log "Current rsync processes: $RSYNC_COUNT" - if [ "$RSYNC_COUNT" -ge "$MAX_RSYNC_PROCS" ]; then - echo "Waiting for available rsync slot ($RSYNC_COUNT active)..." - sleep "$SLEEP" - else - return 0 - fi - done - echo "Too many rsync processes, exiting." - exit 1 -} - -# ----------------------------- Main ----------------------------- -main() { - echo "Starting sync: $DIRECTORY → $REMOTE_SERVER" - 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") - log "Rsync options: ${RSYNC_OPTS[*]}" - - for attempt in $(seq 1 "$RETRY_COUNT"); do - echo "Rsync attempt $attempt/$RETRY_COUNT..." - if rsync "${RSYNC_OPTS[@]}" -e "ssh -i \"$SSH_KEY\" -T -o Compression=no -o IPQoS=throughput" \ - "$DIRECTORY" "root@${REMOTE_SERVER}:$DIRECTORY"; then - echo "Rsync completed successfully." - break - else - echo "Rsync attempt $attempt failed." - if [ "$attempt" -lt "$RETRY_COUNT" ]; then - echo "Retrying in $SLEEP seconds..." - sleep "$SLEEP" - else - echo "All $RETRY_COUNT rsync attempts failed." - start_containers - exit 1 - fi - fi - done - - start_containers - echo "Sync complete." - log "[$LOCAL_SERVER_NAME] Sync finished for $DIRECTORY → $REMOTE_SERVER" -} - -main \ No newline at end of file +} \ No newline at end of file