셸 + sendmail 로 서버 모니터링 경보 스 크 립 트 구현

2407 단어
이런 이메일 경보 스 크 립 트 는 곳곳에 있 습 니 다. 많은 sendmail, potfix 를 사용 하 는데 큰 인재 가 작은 것 같 습 니 다.perl 의 NET::SMTP 와 Authen::SASL 모듈 로 편 지 를 보 냈 습 니 다. 그런데 저 는 perl 을 잘 사용 하지 못 해서 이상 한 메 일 을 보 냅 니 다 (예 를 들 어 if (a > 1) {print (a);}. 마지막 메 일 에 나타 난 것 은 0.99...).마지막 으로 sendmail 이라는 성형 perl 프로그램 으로 신 고 를 보 냈 고 실시 간 모니터링 부분 은 셸 로 돌아 가 마침내 완성 되 었 다.
 
  
wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
tar zxvf sendEmail-v1.56.tar.gz
cp sendEmail-v1.56/sendEmail /shell/check/
cat >> check.sh <

파일 -- check. sh:
 
  
#!/bin/bash
checkmail() {
    /usr/bin/perl ./sendEmail -f [email protected] -t [email protected] �Ccc [email protected] [email protected]
-u "$subject" -m "$data" -s smtp.mail.com -xu userid -xp password
    sleep 300
}
while true;do
    loadavg=`awk '{print $2}' /proc/loadavg`
    diskuse=`df |awk '/cache/{print $5}'`
    servrun=`netstat -pln|awk -F/ '/:80/{print $NF}'`

    ip=`ifconfig|awk '/cast/{print $2}'|awk -F: '{if(NR==1){a=$2}else if(NR==2){b=$2}}END{print b"-"a}'`
    data=`echo -e "ip:$ip
loadavg/5min:$loadavg\tcacheuse%:$diskuse\tservice:$servrun"`
    diskper=`echo $diskuse|sed 's/%//'`

    num=`ps aux|grep check.sh|grep -v grep|wc -l`

    if [[ $num > 2 ]];then
        break 2
    fi

    if [[ $loadavg > 1.00 ]] && [[ $diskper > 90 ]];then
        subject="warning-$ip-loadavg-disk"
        checkmail
    else if [[ $loadavg > 1.00 ]];then
        subject="warning-$ip-loadavg"
        checkmail
    else if [[ $diskper > 90 ]];then
        subject="warning-$ip-disk"
        checkmail
    fi
    sleep 60
done
EOF

완료, sh check. sh & >/dev/null 을 실행 하면 됩 니 다.경보 메 일: 제목: warning - 192.168.0.100 - 10.10.10 - disk ip: 192.168.0.100 - 10.10.10 loadavg/5min: 0.38 cacheuse%: 94% service: nginx

좋은 웹페이지 즐겨찾기