쉘 스크립

소규모 ping 테스트와 상태 이상시 메일로 받기

나뭇빛자루 2021. 6. 17. 13:19
반응형

#!/bin/bash

ip_list=(  #여기엔 관리하고 싶은 아이피를 넣는다

#192.168.4.4
)

mail_name(){ #매일 보낼 내용을 변수로 저장함 함수로 둔 이유는 확장성 용의
        변수1=`echo "system or network is down, check your server" | mail -s "$node server is down" 내아이디@도메인.com`

        변수2=`echo "system or network is down, check your server" | mail -s "$node server is down" 내아이디@도메인.com`

}

mail_send(){  #케이스 문을통해서 원하는 서버가 꺼지면 필요한 사람들에게 메일전송 되도록 변수 입력
        echo "in"
        case $node in
                #192.168.4.4)
                        변수1

                        변수2
                        ;;
                *)
                        변수1
                ;;
        esac
}

ping_test(){
        for node in ${ip_list[@]}
        do
                ping -c 1 -W 1 "$node" > /dev/null
                if [ $? -eq 0 ]; then
                        #echo "$node OK"
                        echo "pass" > /tmp/ping_test/$node
                else
                        #echo "$node fail"
                        echo "fail"  >> /tmp/ping_test/$node
                        fail_num=`cat /tmp/ping_test/$node |wc -l`
                        if [ $fail_num -eq "10" ]; then
                                mail_name
                                mail_send

                        fi
                fi
        done
}

#main
while :
do
        ping_test
       sleep 5;
done

 

---------------------------------

 

동작설명 : 

5초마다 

/tmp/ping_test 라는 폴더에 통과값과 실패 값을 저장

실패 값이 10번 이상이면 

매일을 딱 한번만 전송한다 << 

 

----------------------------------

실행시

 

[root@대충이름]# bash 스크립트이름.sh &

 

로 실행하면 따로 모니터링 할 필요도 없고 편함 

 

 

 

정말 고민 많이했던건  ping이 어쩔땐 오고 어쩔땐 안오고

또 계속 메일이 날라온다던가 이런 자잘한 이슈들을 전부 해결했음

완벽한 프로그램은 없다시피 그냥 편하게 굴러가게 만들어둠

함수로 만들었기 때문에 확정성이 용의함

 

VSZ와 RSS도 각각 18992   724  밖에 안되서 상당히 가벼움 저장용량도

얼마 안들고 모니터링도 쉽다

 

[root@대충이름]# cat /tmp/ping_test/*
pass
pass
pass
pass
pass
pass
fail
pass
pass

 

대충 저기다가 watch -n 5 '' 로 하면 됨 

 

누군가 이런일 때문에

시간낭비하는 걸 막고자 글 작성함

반응형