본문 바로가기

리눅스

[draft] rsync 스크립트

728x90

rsync 스크립트

테스트 환경

구분 서버 이름 서버 아이피 디렉터리(데이터) 비고
source serv-A 192.168.0.131 /app/www, /app/data  
target serv-B 192.168.0.130 /app/www, /app/data  

sync script

필수 패키지 설치

sudo apt-get update
sudo apt-get install -y sshpass

SSH 접속 테스트

ssh datasyncuser@192.168.0.131

데이터 동기화 스크립트 작성

스크립트 작성

vim sync_script.sh
#!/bin/bash

# Variables
REMOTE_HOST="192.168.0.131"
REMOTE_USER="datasyncuser"
PASSWORD="Password1!"
REMOTE_BASE_PATH="/app"
LOCAL_BASE_PATH="/app"

# 동기화할 디렉터리
declare -A SYNC_PATHS=(
    ["/www/image"]="/www/"
    ["/data/image"]="/data/"
)

# sshpass를 사용하여 동기화를 수행하는 기능
sync_directories() {
    local remote_path=$1
    local local_path=$2

    # 로컬 디렉터리가 있는지 확인하고 없는 경우 생성합니다
    if [ ! -d "${LOCAL_BASE_PATH}${local_path}" ]; then
        echo "Creating local directory: ${LOCAL_BASE_PATH}${local_path}"
        mkdir -p "${LOCAL_BASE_PATH}${local_path}"
    fi

    # 동기화 수행
    sshpass -p "$PASSWORD" rsync -azpgo "${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_BASE_PATH}${remote_path}" "${LOCAL_BASE_PATH}${local_path}"
}

# 디렉터리 반복 및 동기화
for remote_path in "${!SYNC_PATHS[@]}"; do
    sync_directories "$remote_path" "${SYNC_PATHS[$remote_path]}"
done
  • -a(Archive mode) : 아카이브 모드로 실행합니다.
  • -z(Compression) : 데이터를 압축해서 전송합니다.
  • -p(Preserve permissions) : 파일과 디렉토리의 권한을 복사합니다.
  • -g(Preserve group) : 파일과 디렉토리의 그룹 소유권을 유지합니다.
  • -o(Preserve owner) : 파일의 소유자를 유지합니다.
Archive mode의 옵션은 디렉토리와 파일의 속성(심볼릭 링크, 권한, 타임스탬프, 소유권 등)을 유지하면서 복사합니다.
실제로는 여러 옵션이 결합된 것으로 -rlptgoD와 동일합니다.
-r : 재귀적으로 디렉토리를 복사 (하위 디렉토리도 포함)
-l : 심볼릭 링크를 그대로 복사
-p : 파일의 권한을 유지
-t : 타임스탬프를 유지
-g : 그룹 소유권을 유지
-o : 파일 소유자를 유지
-D : 장치 파일 및 특수 파일 복사

스크립트 권한 설정

chmod +x sync_script.sh

스크립트 실행

bash sync_script.sh

 

728x90