前提已经可以通过mail或mutt客户端发邮件
1. 先安装sendmail来发邮件
# yum -y install sendmail
# /etc/init.d/sendmail start
# chkconfig sendmail on
2.再安装邮件客户端
首先下载最新版本mailx-12.4.tar.bz2
wget http://sourceforge.net/projects/heirloom/files/latest/download?source=files
解压包:
1
2
3
4
5 1# tar jxvf mailx-12.4.tar.bz2
2# cd mailx-12.4
3# make
4# make install UCBINSTALL=/usr/bin/install
5
注意:如果没有卸载旧版本的mailx,是不能直接使用mailx或mail命令的,否则使用的仍然是旧版mailx。
查看版本号:
1
2 1#/root/mailx-12.4/mailx -V
2
写入.bashrc
1
2
3
4 1# vi /root/.bashrc
2添加一行:alias mail='/root/mailx-12.4/mailx'
3# source /root/.bashrc
4
这时再执行mail命令即代表新版mailx。
接下来配置新版mailx使用外部邮箱发送邮件:
编辑/etc/nail.rc(注意不是旧版的/etc/mail.rc):
1
2
3
4
5
6 1vi /etc/nail.rc 添加两行:
2
3set from=myname@163.com smtp=smtp.163.com
4
5set smtp-auth-user=myname smtp-auth-password=password smtp-auth=login
6
第一行指明所使用的外部邮箱及smtp服务器
第二行指明外部邮箱使用的用户名和密码。
这里我用的是163邮箱要开启POP3/SMTP服务和IMAP/SMTP服务开启后会让你输入授权码,授权码就是这里需要指定的密码
保存,并重启sendmail服务
1
2 1#service sendmail restart
2
如果执行报错:
1
2 1sendmail: unrecognized service
2
是因为没有安装sendmail,通过yum安装上就ok
1
2 1yum install sendmail
2
安装成功,继续执行重启sendmail服务步骤
sendmail启动成功后怎么使用呢?
1
2
3
4
5
6
7 1#echo 'Tset ' | mailx -s "Test test" jieshouren@163.com
2#echo -e "中文内容测试! " | /root/mailx-12.4/mailx -s "中文标题" jieshouren@qq.com
3#echo 'Tset ' 表示内容
4#-s "Test test" 表示标题
5#也可以打印整个文件内容
6#cat /home/Tset.log | mailx -s "Test test" jieshouren@163.com
7
方法一、通过加失败计数器来判断(误报率低)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 1#!/bin/bash
2DATE=`date +%F" "%H:%M`
3IP=/root/monitor/ip.txt #ip地址表
4MAIL=zhenliang369@163.com
5for ip in $(cat $IP | sed '/^#/d')
6do
7 for ((i=1;i<=3;i++))
8 do
9 ping -c 1 $ip &>/dev/null
10 [ $? -ne 0 ] && let FailCount+=1;
11 done
12done
13[ -z $FailCount ] && FailCount=0 #当ping都正常时,FailCount值为空,就设置FailCount值为0,用整数比较
14if [ $FailCount -eq 2 ];then
15 #echo "$IP ping is failed."
16 echo -e "Date : $DATE\nHost : $ip\nProblem : Ping is failed, Please check ! ! !" | mailx -s "Ping Monitor" $MAIL
17fi
18
19
#添加任务计划
1
2
3 1# crontab -e
2*/1 * * * * /root/monitor/ping.sh
3
方法二、通过ping一个包的状态判断(误报率低,建议此方法)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 1#!/bin/bash
2MAIL="baojingtongzhi@163.com huangxiaohong@loongtao.com"
3for ip in $(cat ip_list|sed "/^#/d") #ip_list是当前目录下IP表
4 do
5 ping -c 1 $ip &>/dev/null #三个ping有一个能通,说明服务器正常
6 a=$?
7 sleep 2
8 ping -c 1 $ip &>/dev/null
9 b=$?
10 sleep 2
11 ping -c 1 $ip &>/dev/null
12 c=$?
13 sleep 2
14 DATE=$(date +%F" "%H:%M)
15 if [ $a -ne 0 -a $b -ne 0 -a $c -ne 0 ];then
16 echo -e "Date : $DATE\nHost : $ip\nProblem : Ping is failed." | mailx -s "Ping $ip failed From 255.252" $MAIL
17 #else
18 # echo "$ip ping is successful."
19 fi
20done
21
方法三、通过丢包率来判断是否正常(误报率高)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 1#!/bin/bash
2while true
3do
4 DATE=`date +%F" "%H:%M`
5 MAIL="zhenliang369@163.com"
6 for ip in $(cat ip_list|sed "/^#/d") #ip_list是当前目录下IP表
7 do
8 num=$(ping -c 2 $ip |grep "100% packet loss" |wc -l)
9 if [ $num == 1 ];then
10 echo -e "Date : $DATE\nHost : $i\nProblem : Ping is failed." | mailx -s "Ping $i failed From 255.252" $MAIL
11 fi
12 done
13sleep 30
14done
15