服务或服务器自动启动时的电子邮件警报
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
为了进行简单测试,我只使用了回显语句而不是发送电子邮件。
我正在开发一个 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
为了进行简单测试,我只使用了回显语句而不是发送电子邮件。