서버를 rsync로 백업시 30분 이내의 시간주기로 백업을 해야 될때가 있다. 그런데 cron으로 스케쥴 작업하기엔 무리가 있을 수 있다.
왜냐하면 많은 양의 데이터가 수시로 업데이트가 이루어 지는 경우 crond을 통해 짧은 주기로 rsync를 돌리다 보면 rsync가 이중으로 프로세싱이 될 가능성이 크기 때문이다.
엔파일 fs2 쿼터서버 백업이 그중 하나이다. fs2 쿼터서버는 데이터 업데이터가 자주 일어나고 중요 서버이기 때문에 주기적인 rsync가 필요해서 while 문으로 돌리는 스크립트를 짜서 백그라운드로 돌린다. 하지만 해당스크립트를 멈추거나, 진행상황을 보는등의 제어가 어렵다. 그래서 screen을 시작스크립트인 rc.loca에 적용해서 해당 스크립트를 띄우려 하면 스크린쉘로 진입이 안된다.
따라서 리눅스 시작 스크립트에 screen을 이용해서 rsync를 돌리고 제어하기 위해서 아래와 같은 옵션을 적용해야 된다.
1) rc.local에 screen을 적용한 방법
[root@DTPZ-Backup ~]# cat /etc/rc.local
.
.
/usr/bin/screen -AmdS rsync /bin/bash -i /usr/local/script/rsync_loop.sh
2) rsync 루프 쉘은 아래와 같다.
[root@DTPZ-Backup ~]# cat /usr/local/script/rsync_loop.sh
#!/bin/bash
while :
do /usr/bin/rsync -avr --delete --exclude='lost+found' 172.1.1.3::sample /home/sample/ 2> /var/log/rsync.log
date
sleep 1200
done
3) 해당 쉘스크립트의 screen에 접근 방법
1> 첫번째 방법(단 한개의 screen만 띄워져 있을때)
[root@DTPZ-Backup ~]# screen -r
2> 두번째 방법
[root@DTPZ-Backup ~]# screen -r rsync