服务或服务器自动启动时的电子邮件警报

Email Alerts when service or server automatically comes up

我正在开发一个 bash 脚本,它有助于 ping 并获取主机和服务的网络接口级别状态。 如果失败,此脚本将发送电子邮件警报。

#!/bin/bash
HOSTS="192.168.8.200"
COUNT=4
for myHost in $HOSTS
do
  count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print  }' | awk '{ print  }')
  if [ $count -eq 0 ]; then
    # 100% failed
    echo -e "HOST:$myHost is down (ping failed) at $(date)" | mailx -A gmail    -s “Mail       subject” anymail@anydomain.com

  fi
done

这很好用。 但是需要帮助才能在主机自动出现时获得一封电子邮件警报(ping 成功)。

您需要在脚本调用期间保存主机 (up/down) 的状态。 如果主机是 "up" 而前一个状态是 "down" 那么你需要发送一封电子邮件。 您可以将 "check command" 的结果写入 /tmp/ 中的文件 如果检查 returns 服务器已启动,您将读取文件的内容。如果文件中的状态为 "down",则发送电子邮件并向文件写入 "up"。 下次检查服务器是否启动时,将不会再发送电子邮件,因为服务器之前也是 "up"。

#!/bin/bash
HOSTS="192.168.8.200 192.168.8.201 192.168.122.1"
COUNT=4 
STATE="/tmp/ping_state.txt"

for myHost in $HOSTS
do      
  count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print  }' | awk '{ print  }')
  if [ $count -eq 0 ]; then 
    # 100% failed
    #echo -e "HOST:$myHost is down (ping failed) at $(date)" | mailx -A gmail    -s “Mail       subject” anymail@anydomain.com
     echo "host $myHost down"
    #delete all previous entries of that ip 
    sed -i "/$myHost/d" $STATE
    #mark host as down 
    echo "$myHost - down" >> $STATE
  else    
    CHECK=`grep "$myHost" $STATE | grep -o "down"` 
    if [ "$CHECK" = "down" ]; then 
      echo "host $myHost up again"
      #insert email for host up here
    fi      

    #delete all previous entries of that ip 
    sed -i "/$myHost/d" $STATE
    echo "$myHost - up" >> $STATE
  fi      
done

为了进行简单测试,我只使用了回显语句而不是发送电子邮件。