728x90
rsync 스크립트
테스트 환경
구분 | 서버 이름 | 서버 아이피 | 디렉터리(데이터) | 비고 |
source | serv-A | 192.168.0.131 | /app/www, /app/data | |
target | serv-B | 192.168.0.130 | /app/www, /app/data |
필수 패키지 설치
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
'리눅스' 카테고리의 다른 글
[draft] HPE 서버에서 RAID를 재구성하고 LVM으로 설정하는 방법 (1) | 2024.09.12 |
---|---|
[draft] 리눅스에서 SSH 액세스 권한 부여하기 (0) | 2024.09.11 |
[draft] screwim을 사용하여 PHP 파일을 보호하고 이를 테스트하는 방법 (0) | 2024.09.10 |
[draft] CentOS 7에서 www-data 계정을 생성하는 방법 (0) | 2024.09.10 |
[draft] 우분투에 ipmitool을 설치하고 사용하는 방법 (0) | 2024.09.06 |