리눅스에서 주기적인 백업 스케쥴링을 하기위해서 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
'Unix & Linux' 카테고리의 다른 글
리눅스(Linux), 삼바 (SAMBA) 간단 설정 <완> (0) | 2020.12.18 |
---|---|
<UBUNTU> ROOT 계정 SSH 로그인 허용 (0) | 2020.12.18 |
<UBUNTU> 유저 추가하기 / root 권한 부여 (0) | 2020.12.18 |
<QT Program> Serial Port 추가 (0) | 2020.12.02 |
RSYNC 용법 (0) | 2020.11.30 |