Ping工具检查服务器是否在线

时间:2013-08-15 17:37:52

标签: bash

我从各种SOF线程创建的这个工具是否有效?它会起作用吗?我希望每分钟都对服务器进行一次ping测试。如果它连续5次失败,它会发送一封电子邮件。然后它会刷新并重置脚本以便再次检查。

#!/bin/bash
# ping checker tool

numOfFails=0
incrememnt=1
EMAILMESSAGE="/tmp/emailmessage.txt"

while true; do
    if ! ping -c 1 google.com ; then #if ping exits nonzero...
        numOfFails=$(($num + $increment))
    else
        numOfFails=0
    fi
    if ((numOfFails > 4)); then
        numOfFails=0
        echo "SAN is offline!" > $EMAILMESSAGE
        mail -s "SAN offline" "test@test.com" < $EMAILMESSAGE
    fi
    sleep 60 #check again in one minute
done

3 个答案:

答案 0 :(得分:6)

您的代码根本不起作用,这是修订版:

#!/bin/bash
# ping checker tool

FAILS=0
EMAIL_ADDRESS="example@example.com"
SERVER="192.168.1.1"
SLEEP=60

while true; do
    ping -c 1 $SERVER >/dev/null 2>&1
    if [ $? -ne 0 ] ; then #if ping exits nonzero...
        FAILS=$[FAILS + 1]
    else
        FAILS=0
    fi
    if [ $FAILS -gt 4 ]; then
        FAILS=0
        echo "Server $SERVER is offline!" \
            | mail -s "Server offline" "$EMAIL_ADDRESS"
    fi
    sleep $SLEEP #check again in SLEEP seconds
done

更改example@example.com192.168.1.1以获取您的电子邮件地址和您正在测试的服务器的IP地址。我建议使用IP地址而不是主机名来防止名称解析错误与连接错误混合。

请注意,虽然这样可行但我建议运行一个与cron略有不同的脚本,而不是让它像你想要的那样连续运行,从cron运行时你不需要监视脚本是否正在运行,因为如果它因某种原因停止,服务器的监控也会停止。

像这样的东西每分钟从crontab运行。

#!/bin/bash
# ping checker tool

TMP_FILE="/tmp/ping_checker_tool.tmp"
if [ -r $TMP_FILE ]; then
    FAILS=`cat $TMP_FILE`
else
    FAILS=0
fi
EMAIL_ADDRESS="example@example.com"
SERVER="192.168.1.1"

ping -c 1 $SERVER >/dev/null 2>&1
if [ $? -ne 0 ] ; then #if ping exits nonzero...
    FAILS=$[FAILS + 1]
else
    FAILS=0
fi
if [ $FAILS -gt 4 ]; then
    FAILS=0
    echo "Server $SERVER is offline!" \
        | mail -s "Server offline" "$EMAIL_ADDRESS"
fi
echo $FAILS > $TMP_FILE

答案 1 :(得分:0)

考虑使用Pingdom。它为您提供此服务。

您没有考虑的一件事是,一旦您的网站出现故障,您将每分钟继续收到电子邮件,直到该网站再次启动,或直到您停止此脚本。

一种好的方法是在网站停机时将状态从报告切换到网站启动时的报告,一旦检测到网站已关闭。一旦它恢复,再回来。

基本上,您会收到一封报告“网站关闭”的电子邮件,然后会收到另一封电子邮件,希望报告“网站已关闭”。

Pingdom非常适合你。

答案 2 :(得分:0)

我一直在调查如何执行此操作,以便我可以根据手机是否在家中激活/停用服务。我想出了以下内容:

#!/bin/bash

HOST_TO_CHECK=<hostname>

if ping -qc 20 $HOST_TO_CHECK >/dev/null; then
    echo "Host $HOST_TO_CHECK is up"
else
    echo "Host $HOST_TO_CHECK is down"
fi

&lt; hostname&gt; 替换为您要检查的主机。

该脚本将ping主机20次。 这样做的原因是我的手机并不总是立即响应ping。

显然你可以用某些东西替换echo命令来实际做一些有用的事情: - )

然后,您可以通过将脚本添加到crontab来安排脚本每5分钟检查一次:

*/5 * * * * /opt/pingcheck.sh