클라우드/BashShell

스토리지 서버 트러블 재발 방지를 위한 처리 쉘 스크립트

고고잉 2023. 3. 10. 21:14

시나리오
 - 예상 불가능한 문제로 백업이 제대로 안됐을 경우에 알림 메세지를 받을 수 있도록 감시 쉘 스크립트를 작성

wc
- 라인 수 , 단어 수 , 바이트, 파일이름 출력
-  -l : 라인 수만 출력

grep
- grep 옵션 "찾을 문자열" 파일명
- -c : 지정한 문자열을 가진 라인이 몇 개 었는지 출력
- -i : 대소문자를 구분
- -r : 현재 디렉토리와 그 하위 디렉토리까지 검색
- -v : 지정한 문자열을 제외한 모든 라인을 출력

function
- 함수를 정의
- 주의할 점
- 쉘 스크립트는 순차적으로 위에서부터 실행, 함수 or 변수를 모아놓은 파일을 가져와 사용할 떄는 가장 상단에서 불러와야 한다. 
-  function 함수명 () {
              매개변수를 받아서 처리할 내용
              함수 처리 루틴
}

function readtest () {
read A
read B
echo ${A} ${B}
}
readtest

- read : 유저가 입력하면 지정한 변수에 넣음


vi backup_monitor.sh

##변수지정
TODAY=$(/bin/date +%Y.%m.%d)
PUSH="/root/SHELL/monitor/tel_push.sh"
LOG="/tmp/bak_report"
HOST=$(hostname)
WEB="/nfs/BACKUP/cent1/* .tgz"
DB1="/nfs/BACKUP/cent2/* cent2 .tgz"
DB2="/nfs/BACKUP/cent2/* DB .tgz"
STR="/nfs/BACKIP/cent3/* .tgz*"
WBK_CNT=$(/usr/bin/ls -1 ${WEB} | /usr/bin/wc -1)
DBK_CNT1=$(usr/bin/ls -1 ${DB1} | /usr/bin/wc -1)
DBK_CNT2=$(usr/bin/ls -1 ${DB1} | /usr/bin/wc -1)
SBK_CNT=$(/usr/bin/ls -1 ${STR} | /usr/bin/wc -1)

##함수정의
- 인자를 두개 받아 비교 메세지를 반환
- 인자1 : 백업이름
- 인자2 : 백업카운트
function chk_cnt(){
##인자를 변수에 할당
NAME="$1"
CNT="$2"
##백업카운트 (${CNT})가 8이 아닐 경우 확인하도록 메세지
##8이 맞을 경우 문제가 없다는 메세지를 출력
if [ "${CNT}" -eq 8 ]
then
/usr/bin/echo "${NAME} 백업파일 문제없음"
/usr/bin/echo
else
/usr/bin/echo "${NAME} 백업파일dl 8개가 아닙니다! 확인하세요 !"
/usr/bin/echo
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/ls -1 ${WEB} | /usr/bin/grep " ${TODAY}"
/usr/bin/echo
/usr/bin/echo "DB서버 백업파일"
/usr/bin/ls -1 ${DB} | /usr/bin/grep " ${TODAY}"
/usr/bin/echo
/usr/bin/echo "Storage 서버 백업파일"
/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}"


##텔레그램으로 레포트 메세지를 보냄
"${PUSH}" " ${HOST}"   " $(/usr/bin/cat " ${LOG}")"

crontab -e
30 10  * * * /root/SHELL/monitor/backup_monitor.sh >/dev/null 2>$1