cleaned up rsync.sh

This commit is contained in:
2026-03-24 22:54:14 +00:00
parent d1f51f6304
commit a130529a74
+19 -34
View File
@@ -1,17 +1,14 @@
#!/bin/bash #!/bin/bash
set -e set -e
#-----------------------------------------------------------------------------------------------
# Main Rsync Script for unRAID
#-----------------------------------------------------------------------------------------------
#--------------------------------------------- # ---------------------------------------------------------------------------------
# -------------------------- Rsync Script Using Master.conf ------------------------
# ---------------------------------------------------------------------------------
# Detect script directory # Detect script directory
#---------------------------------------------
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
#--------------------------------------------- # Load Master.conf
# Load Master.conf (hosts, keys, profiles, helpers)
#---------------------------------------------
MASTER_CONF="$SCRIPT_DIR/../Master.conf" MASTER_CONF="$SCRIPT_DIR/../Master.conf"
if [ -f "$MASTER_CONF" ]; then if [ -f "$MASTER_CONF" ]; then
source "$MASTER_CONF" source "$MASTER_CONF"
@@ -21,28 +18,22 @@ else
exit 1 exit 1
fi fi
#--------------------------------------------- # ----------------------------- Parse Input Arguments -----------------------------
# Input Arguments: Directory (positional)
#---------------------------------------------
DIRECTORY="$1" DIRECTORY="$1"
if [[ -z "$DIRECTORY" ]]; then if [[ -z "$DIRECTORY" ]]; then
echo "Usage: $0 <directory-to-sync> [--dry-run|-n] [VAR=value ...]" echo "Usage: $0 <directory-to-sync> [--dry-run] [VAR=value ...]"
exit 1 exit 1
fi fi
shift 1 # Remove directory from $@ so parse_args sees only options/VARs shift 1
#--------------------------------------------- # Handle optional flags & variable overrides
# Parse optional arguments (dry-run / VAR=VALUE) parse_args "$DIRECTORY" "$@"
#---------------------------------------------
parse_args "$@"
echo "Detected profile: $(basename "$DIRECTORY" | tr '[:upper:]' '[:lower:]')" # -------------------------- Determine Profile & Settings -------------------------
#---------------------------------------------
# Apply profile defaults or fallback to Master.conf
#---------------------------------------------
PROFILE_NAME=$(basename "$DIRECTORY" | tr '[:upper:]' '[:lower:]') PROFILE_NAME=$(basename "$DIRECTORY" | tr '[:upper:]' '[:lower:]')
echo "Detected profile: $PROFILE_NAME"
# Profile-specific settings with fallback to global defaults
MAX_RSYNC_PROCS=${PROFILE_MAX_PROCS[$PROFILE_NAME]:-$MAX_RSYNC_PROCS} MAX_RSYNC_PROCS=${PROFILE_MAX_PROCS[$PROFILE_NAME]:-$MAX_RSYNC_PROCS}
BW_LIMIT=${PROFILE_BW_LIMIT[$PROFILE_NAME]:-$BW_LIMIT} BW_LIMIT=${PROFILE_BW_LIMIT[$PROFILE_NAME]:-$BW_LIMIT}
CRITICAL_CONTAINER_NAMES=(${PROFILE_CRITICAL_CONTAINER_NAMES[$PROFILE_NAME]}) CRITICAL_CONTAINER_NAMES=(${PROFILE_CRITICAL_CONTAINER_NAMES[$PROFILE_NAME]})
@@ -54,9 +45,7 @@ EXCLUDE_DIRS=(${PROFILE_EXCLUDE_DIRS[$PROFILE_NAME]:-${EXCLUDE_DIRS[@]}})
echo "Settings: MAX_RSYNC_PROCS=$MAX_RSYNC_PROCS, BW_LIMIT=$BW_LIMIT, CONTAINERS=${CRITICAL_CONTAINER_NAMES[*]}, EXCLUDES=${EXCLUDE_DIRS[*]}" echo "Settings: MAX_RSYNC_PROCS=$MAX_RSYNC_PROCS, BW_LIMIT=$BW_LIMIT, CONTAINERS=${CRITICAL_CONTAINER_NAMES[*]}, EXCLUDES=${EXCLUDE_DIRS[*]}"
#--------------------------------------------- # --------------------------- Dependency Check ------------------------------------
# Dependency check
#---------------------------------------------
for cmd in rsync ssh ping timeout docker tailscale; do for cmd in rsync ssh ping timeout docker tailscale; do
command -v "$cmd" >/dev/null 2>&1 || { command -v "$cmd" >/dev/null 2>&1 || {
echo "Error: Required command '$cmd' is not installed." echo "Error: Required command '$cmd' is not installed."
@@ -66,9 +55,10 @@ done
trap 'echo "Script interrupted. Exiting."; exit 130' INT TERM trap 'echo "Script interrupted. Exiting."; exit 130' INT TERM
#--------------------------------------------- # ---------------------------------------------------------------------------------
# Helper Functions # ------------------------- RUNTIME LOGIC (DO NOT MODIFY) -------------------------
#--------------------------------------------- # ---------------------------------------------------------------------------------
wait_for_rsync() { wait_for_rsync() {
for attempt in $(seq 1 "$RETRY_COUNT"); do for attempt in $(seq 1 "$RETRY_COUNT"); do
RSYNC_COUNT=$(pgrep -fc "rsync.*root@${REMOTE_SERVER}" || true) RSYNC_COUNT=$(pgrep -fc "rsync.*root@${REMOTE_SERVER}" || true)
@@ -114,9 +104,6 @@ start_containers() {
done done
} }
#---------------------------------------------
# Main sync logic
#---------------------------------------------
main() { main() {
echo "[$LOCAL_SERVER_NAME] Syncing $DIRECTORY$REMOTE_SERVER:$DIRECTORY" echo "[$LOCAL_SERVER_NAME] Syncing $DIRECTORY$REMOTE_SERVER:$DIRECTORY"
@@ -173,7 +160,5 @@ main() {
echo "[$LOCAL_SERVER_NAME] Sync complete." echo "[$LOCAL_SERVER_NAME] Sync complete."
} }
#--------------------------------------------- # Execute main
# Execute
#---------------------------------------------
main main