◾️ 시나리오
예상 불가능한 문제로 백업이 제대로 안됐을 경우에 알림 메세지를 받을 수 있도록 감시 쉘 스크립트를 작성하기
▪️ 알아야할 커맨드
wc
grep 'hello' ./hello.log | wc -l
3
grep
grep -c : 지정한 문자열을 가진 라인이 몇 개 있는지 출력
grep -i : 대소문자 구분
grep -r : 현재 디렉토리와 그 하위 디렉토리까지 검색
grep -v : 지정한 문자열을 제외한 모든 라인을 출력
▪️ 작업 흐름
- 백업 파일 확인
- 오늘자 백업파일 확인 (date,grep)
- 서버별 파일 리스트 출력
- 오늘자 백업파일 확인 (date,grep)
- 백업 파일 개수 확인
- 7개면 문제없음 (7일치만 백업하므로)
- 7개가 아니면 백업 종류와 확인 메시지 텔레그램으로 알람보내기
- 작성한 레포트를 관리자의 텔레그램으로 전송
◾️ 스크립트 작성
!/usr/bin/bash
## 변수지정
TODAY=$(/bin/date +%Y.%m.%d)
TEL_FILE="/root/monitor/tel_push.sh"
LOG="/tmp/bak_report"
HOST="$(hostname)"
WEB="/nfs/backup/cent1/*cent1.tgz"
DB1="/nfs/backup/cent2/*cent2.tgz"
DB2="/nfs/backup/cent2/*DB.tgz"
STR="/nfs/backup/cent3/*.tgz"
WBK_CNT="$(/usr/bin/ls -1 ${WEB} | /usr/bin/wc -l)"
DBK_CNT1="$(/usr/bin/ls -1 ${DB1} | /usr/bin/wc -l)"
DBK_CNT2="$(/usr/bin/ls -1 ${DB2} | /usr/bin/wc -l)"
SBK_CNT="$(/usr/bin/ls -1 ${STR} | /usr/bin/wc -l)"
## 함수 정의
# 인자를 두 개를 받아서 비교 , 메시지를 반환
# 인자1 : 백업이름
# 인자2 : 백업 카운트
function chk_cnt() {
# 인자를 변수에 할당
NAME="${1}"
CNT="${2}"
# 백업 카운트(${CNT})가 8이 아닐 경우 확인하도록 메세지
# 8이 맞을 경우 문제가 없다는 메세지를 출력
if [[ ! ${CNT} -eq 8 ]];
then
/usr/bin/echo "${NAME} 백업파일이 8개가 아닙니다! 확인하세요."
/usr/bin/echo
else
/usr/bin/echo "${NAME} 백업파일 문제없음"
fi
}
## 로그파일 초기화
/usr/bin/rm -f "${LOG}"
/usr/bin/touch "${LOG}"
## 레포트 메세지 작성
{
/usr/bin/echo
/usr/bin/echo "==========="
/usr/bin/echo " 백업 확인"
/usr/bin/echo "==========="
/usr/bin/echo
/usr/bin/echo "웹서버 백업파일:"
/usr/bin/ls -1 ${WEB} | /usr/bin/grep ${TODAY}
/usr/bin/echo
/usr/bin/echo "DB서버1 백업파일:"
/usr/bin/ls -1 ${DB1} | /usr/bin/grep ${TODAY}
/usr/bin/echo
/usr/bin/echo "DB서버2 백업파일:"
/usr/bin/ls -1 ${DB2} | /usr/bin/grep ${TODAY}
/usr/bin/echo
/usr/bin/echo "스토리지서버 백업파일:"
/usr/bin/ls -1 ${STR} | /usr/bin/grep ${TODAY}
/usr/bin/echo
# 백업 별 파일숫자 확인
chk_cnt Web_System "${WBK_CNT}"
chk_cnt DB_System "${DBK_CNT1}"
chk_cnt DB_DUMP "${DBK_CNT2}"
chk_cnt STORAGE_System "${SBK_CNT}"
} >|"${LOG}"
## 텔레그램으로 레포트 메세지를 보냄
"${TEL_FILE}" "${HOST}" "$(/usr/bin/cat ${LOG})"\