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

时间:2017-07-06 10:21:30

标签: bash email alert ping rhel

我正在开发一个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 $2 }' | awk '{ print $1 }')
  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成功)。

1 个答案:

答案 0 :(得分:1)

您需要在调用脚本期间保存主机的状态(向上/向下)。 如果主持人是" up"而且前者是#34; down"那你需要发一封电子邮件。 你可以写出" check命令的结果"到/ tmp /中的文件 如果检查返回服务器已启动,则读取文件的内容。如果国家是" 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 $2 }' | awk '{ print $1 }')
  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

对于简单测试我只使用了echo语句而不是发送电子邮件。