4

我从各种 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
4

3 回答 3

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
于 2013-08-19T03:45:02.097 回答
0

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

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

一个好的方法是,一旦您检测到站点已关闭,就将状态从站点关闭时的报告切换到站点启动时的报告。然后再回来,一旦它备份。

本质上,您会收到一封报告“站点已关闭”的电子邮件,然后可能会收到另一封电子邮件,报告“站点已启动”。

Pingdom 为您做到这一点,非常好。

于 2013-08-18T13:03:32.753 回答
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

<hostname>替换为您要检查的主机。

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

显然,您可以将 echo 命令替换为实际做一些有用的事情:-)

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

*/5 * * * * /opt/pingcheck.sh
于 2015-07-11T18:36:50.660 回答