我正在开发一个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成功)。
答案 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语句而不是发送电子邮件。