Unix & Linux

<Linux> RSYNC 와 CRONTAB 으로 백업하기 <끝>

LEEHANDS 2020. 12. 10. 12:11
반응형

리눅스에서 주기적인 백업 스케쥴링을 하기위해서 2가지를 알아야합니다.

바로, Rsync 와 Crontab 입니다.

 

Rsync 는 어떻게 백업할 것인가?

Crontab 은 언제 백업할 것인가?

 

1. RSYNC

rsync 는 Remote Sync 의 약자로 samba 의 핵심 개발자가 만들었다.

Unix 용 Command line Utility

원격에있는 파일과 디렉토리를 복사하고 동기화 하기위해서 사용하는 툴

>apt-get install rsync

이 스크립트를 cron 등에 올리는 것으로 간단하게 backup 시스템을 구축할 수 잇다.

 

전송시에 네트워크 대역폭을 최소화하는 delta encoding algorithm 을 구현하여 rcp 나 scp 보다 훨씬 빠르고 효율적으로 site 간 데이터를 동기화할 수 있다.

 

rsync 는 client 와 server 프로그램 모두 포함되어있으며, server 로 구동시 TCP 873 Port 사용

 

1-1. 문법

>rsync options source destination

Option :

  -v : verbose 자세한 정보 출력 ( 로그 출력 ) [[필수]]

  -a : archive mode (파일의 수정일자/소유자 정보 그대로 전송) [[필수]]

     --> 자주 사용하는 옵션을 묶어놓은 옵션 (=rlptgoD)

  -z : 데이터 압축 [[필수]]

  -n : 소스파일이 백업파일보다 오래되었다면 복사하지 않는다

  -h : 결과를 사람이 읽기 편한 포멧으로 출력 [[필수]]

  --bwlimit=100 : 파일전송에 사용한 네트워크 대역폭을 제한할 수 있다. (단위는 KB)(1024 = 초당 1MBytes)

  --delete : 원본에 존재하지않는 파일이 대상인 경우 삭제한다.

short long description
-a --archive 자주사용하는 옵션 묶은 옵션 (=-rlptgoD)
-r --recursive 하위 폴더까지 복사
-l --links 심볼릭 링크 유지하면서 동기화
-p --perms 권한 정보 유지하면서 동기화
-t --times 타임스탬프 유지하면서 동기화
-g --group 그룹 소유권 유지
-d --owner 소유권 유지 
-D   디바이스 파일 유지

1-2. 예제

1-2-1. LOCAL to LOCAL

mysql DB 를 /home/backup 에 복제 (일반적인 OPTION 적용 (arzvh)

rsync -azvh [source] [destination]

1-2-2. LOCAL to Remote

local 의 root/data 디렉토리를 example.com 의 /home/backup 에 복제, 호스트 뒤에 : 가 빠지면 제대로 동작하지 않으니 주의

rsync -avz /root/data example.com:/home/backup

1-2-3. REMOTE to LOCAL

example.com 의 home/backup 디렉토리를 LOCAL의 /home/backup 에 복제

rsync -avz example.com:/home/backup /home/backup

 

 

 

 

 

2. CRONTAB

Cron 과 Crontab : Cron 이라는 데몬이 원하는 시간에 명령을 수행하도록 만든 명령리스트를 Crontab 이라고하고

이러한 명령 리스트를 만드는 작업을 Crontab 작업

 

CRONTAB 을 이용한 스케쥴링

유닉스 계열 리눅스, 맥 을 사용하다보면 시간대별로 반복되는 작업을 수행해야하는 경우가있습니다.

crontab [ -u 사용자ID ] 파일, crontab [ -u 사용자ID ] { -l | -r | -e }

crontab 은 대부분 리눅스에 기본적으로 설치되어있습니다.

그러면 작업을 시작해보도록 하겠습니다.

crontab -e

처음실행하는 경우 에디터를 결정하게 되는데요 원하시는 것을 선택하면 됩니다.

저는 vim 을 선호하기 때문에 vim.basic 으로 선택했습니다.

 

2-2, 주요 명령어

 

@reboot: 시스템이 부팅 되었을 때 마다
@hourly: 매 시간 마다 ('0 * * * *' 와 동일)
@midnight(=@daily): 매 자정 마다 ('0 0 * * *'와 동일)
@weekly: 일요일 0시 0분 마다 ('0 0 * * 0'와 동일)
@monthly: 매달 1일 마다 ('0 0 1 * *'와 동일)

 

 

crontab -e : 명령어 등록 및 편집

crontab -d : 등록된 명령 삭제

crontab -l : 등록된 리스트 출력

crontab-r : 현재 사용자가 등록한 crontab 전체 삭제

 

2-3. Crontab 작동확인

service cron status

service cron start 
# 단순 크론을 다시 시작하라는 명령으로 아직 끝나지 않은 명령 리스트를 그대로 가지고 시작
service cron restart
# 기존 크론 작업 리스트를 버리고 새로운 작업리스트로 작업
service cron stop

2-4 예제

* * * * * ex.sh  		# 1분마다 실행
*/10 * * * * ex.sh 		# 10분마다 실행
15 * * * * ex.sh 		# 매시 15분에 실행
0 * * * * ex.sh 		# 매시간마다 실행
0 */2 * * * ex.sh 		# 2시간마다 실행
0 0 11,16 * * ex.sh 		# 오전 11시 오후 4시마다 실행

 

2-5 쉘스크립트 만드는 법

#!/bin/sh
notify-send "hello world"
ls -l home/pi/hello.sh
chmod +x /home/pi/hello.sh # 실행파일로 변경
ls -l home/pi/hello.sh

실행파일이 잘동작하는지 확인

sh hello.sh

크론탭 작성을 아래같이 하면 됩니다.

* /10 * * * * cd /home/pi && sh hello.sh

로그를 작성하려면 아래와 같이 작성

* /10 * * * * cd /home/pi && sh hello.sh >> test.log

 

반응형