【问题标题】:Email Alerts when service or server automatically comes up服务或服务器自动启动时的电子邮件警报
【发布时间】:2017-07-06 10:21:30
【问题描述】:

我正在编写一个 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 成功)。

【问题讨论】:

  • 您已编写代码来检查主机和电子邮件的状态,那么您究竟需要什么帮助?只需添加一个 else,然后在主机启动时添加操作代码?

标签: bash email alert ping rhel


【解决方案1】:

您需要在脚本调用期间保存主机的状态(上/下)。 如果主机是“up”并且之前的状态是“down”,那么你需要发送一封电子邮件。 您可以将“检查命令”的结果写入 /tmp/ 中的文件 如果检查返回服务器已启动,则您读取文件的内容。如果文件中的状态为“关闭”,则发送一封电子邮件,将“向上”写入文件。 在下一次检查服务器是否已启动时,将不会发送额外的电子邮件,因为服务器之前也已“启动”。

#!/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 语句而不是发送电子邮件。

【讨论】:

  • 感谢您的快速建议。我会检查的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 2013-12-25
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
相关资源
最近更新 更多