로그 백업을 위하여 crontab에 등록할 Bash Shell를 작업하려 한다. 익혀간 과정을 적어보자
1) Backup 가정
- 3일전 로그를 압축한다.
- 여러개의 로그파일이 다양한 위치에 존재한다
- 압축된 로그파일은 년/월 별도 디렉토리로 이동하여 관리한다
- 작은 업무 시스템별로 로그의 위치가 틀리다 (단, 작은 업무 시스템안에 디렉토리는 고정임)
2) 3일전 로그찾기
- 몇일전 날짜를 찾는 문법 (참조)
####################################################
# 1) output is 3 days ago
# backup directory name : backup_YYYY-MM in log files
# 3일전 파일을 찾는다
YYYYMMDD=`date +%Y%m%d --date '3 days ago'`
DATE="${YYYYMMDD:0:4}-${YYYYMMDD:4:2}-${YYYYMMDD:6:2}"
BK_DIR="backup_${YYYYMMDD:0:4}-${YYYYMMDD:4:2}"
GZIP_CNT="0"
echo ""
echo "===============================[Backup Start]============================="
echo "<< Start Time: "`date '+%F %r'`" >>"
echo "-- Backup File Date : $DATE, Backup Dir : $BK_DIR"
3) 여러개의 로그파일이 다양한 위치에 존재함
- 지정한 디렉토리에 파일이 있으면 gzip으로 압축한다
####################################################
# 2) run gzip for log files
# ${1} : directory full path
# ${2} : file name
function mkdir_function()
{
if [ ! -d ${1} ]; then
echo " make dir : ${1}"
mkdir ${1}
fi
}
# backup_YYYY-MM 디렉토리가 없으면 만들고 .gz 압축파일을 월별로 관리한다
function mv_file_function()
{
mkdir_function "${1}/$BK_DIR"
echo " move : ${1}/${2}.gz to ${1}/$BK_DIR"
mv ${1}/${2}.gz ${1}/$BK_DIR/
}
# ${1} : directory full path
# ${2} : file name
# 지정된 파일만 압축
function gzip_function()
{
if [ -e ${1}/${2} ]; then
cd "${1}"
echo " gzip : ${1}/${2}"
gzip ${1}/${2}
mv_file_function "${1}" "${2}"
GZIP_CNT=`expr $GZIP_CNT + 1`
fi
}
# for time loop gzip
# 3일 이전의 모든 파일들
function gzip_loop_function()
{
cd "${1}"
for file in `find -type f -mtime +3`; do
local FNAME="${file:2}"
local EXT="${FNAME##*.}"
if [ "$EXT" != "" ] && [ "$EXT" != "gz" ] && [ "$EXT" != "sh" ]; then
gzip_function "${1}" "${FNAME}"
fi
done
}
4) 업무 단위 시스템별로 로그의 위치 지정 : 로그 지정하여 압축 수행함
echo "-- [START] ${JDOMAIN} backup : TX.xml & Error.xml log"
gzip_function "/tmp/logs" "Transactions.log.$DATE"
gzip_function "/tmp/logs" "Error.log.$DATE"
# gc old log
echo "-- [START] ${JDOMAIN} backup : old gclog log"
gzip_loop_function "/tmp/logs/$JDOMAIN/old/gclog"
# nohup old log
echo "-- [START] ${JDOMAIN} backup : old nohup log"
gzip_loop_function "/tmp/logs/$JDOMAIN/old/nohup"
5) 전체 Shell Script
<참조>
- 백업받을 디렉토리를 만들어야 하는 경우 : 하기 내용은 function을 이용한 참조 내역임 (다른 유사 참조)
- Bash Shell 문법을 익혀보자 (참조)
- Bash Shell 문법 : 옵션 잘 설명됨 (참조)
'Middleware, Cloud > Linux' 카테고리의 다른 글
[Linux] CPU 갯수 알아내기 (0) | 2013.02.07 |
---|---|
[Linux] 현재 공동작업하는 사람이 무얼하는지 알고 싶을 경우 (0) | 2013.01.11 |
[Linux] Free Memory 사이즈 알기 (0) | 2012.12.07 |
[Linux] Ubuntu 에 Maven 2 설치 (0) | 2012.11.23 |
[Linux] vsftpd 설치하기 (0) | 2012.11.21 |