如果互联网连接中断,请重新启动计算机

如果互联网连接中断,请重新启动计算机

我正在尝试编写一个小型 bash 脚本来检查互联网连接。如果未检测到互联网,它会在 10 分钟后再次尝试...如果仍然没有互联网,它会重新启动计算机。到目前为止,我已经写了这个。任何建议改进/效率/更好代码的想法都值得赞赏。

#!/bin/bash
# Script to restart the computer if there is no internet connection 
#   within the next 10 minutes of whenever the script is run, which 
#   I'll setup via crontab to run every half an hour. 

IS=`/bin/ping -c 5 8.8.8.8 | grep -c "64 bytes"`        

if (test "$IS" -gt "2") then                                
        internet_conn="1"
    exit
else
    internet_conn="0"
    sleep 600

    AA=`/bin/ping -c 5 74.125.226.18 | grep -c "64 bytes"`

    if (test "$AA" -gt "2") then                                
        internet_conn="1"
        exit
    else
        sudo shutdown -r now
    fi
fi

答案1

我认为您的脚本应该可以正常工作,但您可能需要检查多个地方,而不仅仅是一个 DNS 服务器。当然,这是一个可能永远不会关闭的大型 DNS,但如果他们恰好正在对该 IP 进行维护,您不想重新启动服务器,因此我可能会检查三个来源,如果它们都显示为关闭,则重新启动服务器。

此外,关闭接口并备份而不是重新启动是否更为明智?

答案2

小建议,您不需要 grep 来评估 ping 是否成功。如果成功,Ping 将以 0 退出,如果发生错误,则以 1 或更高的值退出。因此,您也可以按以下方式编写脚本。$? 变量显示最后执行的命令的返回代码。

/bin/ping -c 5 8.8.8.8

if ( $? -ge 1); then
 ......
fi

答案3

这是一种使用at10 分钟后重新安排时间再次检查。

#!/bin/bash
count=${1:-1}
if /bin/ping -c 5 8.8.8.8 2>&/dev/null; then                                
    if [ $count -eq 2 ]; then
        sudo shutdown -r now
    else
        at now + 10 minutes <<< "$0 $((count + 1))"
    fi
fi

答案4

这个答案适用于 2019 年及以后的人:

我尝试使用@rkokkelk 的答案,但它似乎不起作用,如果我没有看错的话,bash 文档证实了这一假设。

因此,我向您介绍我的个人方法(我知道这并不有效,但我希望如此):

#!/bin/bash
# Restarts computer after 90 minutes of no internet connection.

/bin/ping -c 20 8.8.8.8

if [ "$(echo $?)" == 1 ]; then
    sleep 15
    /bin/ping -c 20 8.8.4.4

    if [ "$(echo $?)" == 1 ]; then
        sleep 5400

        /bin/ping -c 20 8.8.8.8

        if [ "$(echo $?)" == 1 ]; then
            sleep 15
            /bin/ping -c 20 8.8.4.4

            if [ "$(echo $?)" == 1 ]; then
                shutdown -r now
            else
                exit
            fi
        else
            exit
        fi
    else
        exit
    fi

else
    exit
fi

这与 兼容bash version 4.4.12(1)-release

相关内容