zoukankan      html  css  js  c++  java
  • 监控 Linux 服务器是否宕机并发送邮件的解决方案

    摘自: 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 为全丢包,其余数值为部分丢包,下图可看出效果

  • 相关阅读:
    NumPy学习笔记 三 股票价格
    NumPy学习笔记 二
    NumPy学习笔记 一
    Raspberry Pi中可用的Go IDE:liteide
    数学公式字母发音
    Apache Avro# 1.8.2 Specification (Avro 1.8.2规范)二
    Apache Avro# 1.8.2 Specification (Avro 1.8.2规范)一
    用Go校验下载文件之SHA256
    垂直水平居中的几种方式,其他方式还有很多,不再列举
    vue-cli3 每次打包都改变css img js文件名,还有自带版本号
  • 原文地址:https://www.cnblogs.com/braless/p/15619351.html
Copyright © 2011-2022 走看看