大家好,欢迎来到IT知识分享网。
摘自: https://ld246.com/article/1568076441812
1.centos 下安装和配置
yum -y install sendmail
yum -y install mailx
2. mail.rc 新增以下内容
set from=your-email@example.com
set smtp-auth-user=your-email@example.com
set smtp=smtp.example.com
set smtp-auth-password=your-password
set stmp-auth=login
3.说明:
- from: 对方收到邮件时显示的发件人
- smtp: 指定第三方发送邮件的 smtp 服务器地址
- smtp-auth-user: 第三方发邮件的用户名
- smtp-auth-password: 用户名对应密码(邮箱授权码)
- smtp-auth: SMTP 的认证方式。默认是 LOGIN,也可改为 CRAM-MD5 或 PLAIN 方式
4.编写检测脚本 ping.sh
#!/bin/bash
Date=`date -d "today" +"%Y-%m-%dT%H-%M-%S"`
echo "根据当前时间创建日志文件"
mkdir -p /log/Ping/
touch /log/Ping/${Date}.log
servers="192.168.4.9 192.168.4.10 \
192.168.4.11 192.168.4.12 192.168.4.13 192.168.4.14 \
192.168.4.21 192.168.4.22 192.168.4.23 192.168.4.24 \
192.168.4.31 192.168.4.32 192.168.4.33 192.168.4.34 \
192.168.4.41 192.168.4.42 192.168.4.43 192.168.4.44"
for server in ${servers}
do
ping_result=`/bin/ping -c 4 ${server} | grep % | awk -F[:" "]+ '{print $6}' | tr -d '%'`
if [[ ${ping_result} -eq "0" ]]
then
echo "${server} is ok"
echo "${server} is ok" >> /log/Ping/${Date}.log
elif [[ ${ping_result} -eq "100" ]]
then
echo "${server} is down"
echo "${server} is down" >> /log/Ping/${Date}.log
else
echo "${server} is packet loss"
echo "${server} is packet loss" >> /log/Ping/${Date}.log
fi
done
/usr/bin/mail -s " Server Status" your-email@example.com < /log/Ping/${Date}.log
#删除log文件
rm -rf /log/Ping/${Date}.log
5.执行结果:
root@ubuntu:~/server_monitor# bash ping.sh
根据当前时间创建日志文件
192.168.4.9 is ok
192.168.4.11 is ok
192.168.4.12 is ok
192.168.4.13 is ok
192.168.4.14 is ok
192.168.4.21 is ok
192.168.4.22 is ok
192.168.4.23 is ok
192.168.4.24 is ok
192.168.4.31 is ok
192.168.4.32 is ok
192.168.4.33 is ok
192.168.4.34 is ok
192.168.4.41 is ok
192.168.4.42 is ok
192.168.4.43 is ok
192.168.4.44 is ok
6.使用 crontab 定时任务每隔半小时执行检测脚本
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
*/30 * * * * /root/server_monitor/ping.sh > /dev/null &
7.优化
若觉得半个小时时间太频繁,可以设置检测到服务器宕机或者丢包的时候发邮件,正常情况下不发
#!/bin/bash
Date=`date -d "today" +"%Y-%m-%dT%H-%M-%S"`
echo "根据当前时间创建日志文件"
mkdir -p /log/Ping/
touch /log/Ping/${Date}_normal.log
touch /log/Ping/${Date}_unnormal.log
servers="192.168.4.9 192.168.4.10 \
192.168.4.11 192.168.4.12 192.168.4.13 192.168.4.14 \
192.168.4.21 192.168.4.22 192.168.4.23 192.168.4.24 \
192.168.4.31 192.168.4.32 192.168.4.33 192.168.4.34 \
192.168.4.41 192.168.4.42 192.168.4.43 192.168.4.44"
for server in ${servers}
do
ping_result=`/bin/ping -c 4 ${server} | grep % | awk -F[:" "]+ '{print $6}' | tr -d '%'`
if [[ ${ping_result} -eq "0" ]]
then
echo "${server} is ok"
echo "${server} is ok" >> /log/Ping/${Date}_normal.log
elif [[ ${ping_result} -eq "100" ]]
then
echo "${server} is down"
echo "${server} is down" >> /log/Ping/${Date}_unnormal.log
else
echo "${server} is packet loss"
echo "${server} is packet loss" >> /log/Ping/${Date}_unnormal.log
fi
done
if [ -s /log/Ping/${Date}_unnormal.log ];then
echo "不为空,发送邮件"
/usr/bin/mail -s " Server Status" your-email@example.com < /log/Ping/${Date}_unnormal.log
else
echo "为空,不发送邮件"
fi
#删除log文件
rm -rf /log/Ping/${Date}_*.log
注意:脚本中的判断条件中 0 和 100 的意思分别为服务器的丢包率,0 为不丢包,100 为全丢包,其余数值为部分丢包,下图可看出效果
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/29562.html