如果断开互联网连接,我可以自动重启吗?

如果断开互联网连接,我可以自动重启吗?

我有一台旧台式机,我在上大学期间把它作为家里的 Web 服务器。家里的互联网很差劲,很多时候断网时,台式机如果不重启就无法重新连接。

有没有办法制作一个脚本,在启动时加载并每隔 12 小时左右尝试 ping 路由器,如果失败则重新启动服务器?

编辑:好的,经过一番谷歌搜索后我就能编写这个脚本了。

#!/bin/bash

ping -c 1 192.168.1.1 > /dev/null
if [ $? -ne 0 ]; then
  reboot
fi

这会测试 ping 是否成功,如果不成功,则会重新启动。
现在我需要做什么才能让它按设定的时间表运行?

答案1

您没有提到操作系统,但如果您使用的是 Windows,那么以下内容可能会有所帮助: 用于 Ping、更新 IP 和网络信息/修复的 JScript

这是我为类似问题编写的脚本。它几乎完全按照您的要求执行操作,即按照给定的时间表 ping 默认网关(即您的路由器),如果 ping 失败则采取所需的措施。

在这种情况下,问题 PC 不需要重新启动,只需编写一个ipconfig /release脚本ipconfig /renew即可恢复连接。类似这样的方法可能也适用于您的情况。如果仍然需要完全重新启动,可以轻松修改此脚本以解决此问题。

对于 Linux,你可以使用如下 shell 脚本:

#!/bin/sh

ping -c5 192.168.1.1

if [ $? -eq 0 ]; then
    echo "ok"
else
    reboot
fi

这是因为返回代码为ping,详见手册页

如果 ping 根本没有收到任何回复数据包,它将以代码 1 退出。如果指定了数据包计数和截止时间,并且到截止时间时收到的数据包少于计数个数,它也将以代码 1 退出。如果发生其他错误,它将以代码 2 退出。否则它将以代码 0 退出。这使得可以使用退出代码来查看主机是否处于活动状态。

将其替换为路由器地址后192.168.1.1,您可以使用 cron 安排每小时左右运行一次。要重新启动,您需要将其作为运行root。对于默认的 Ubuntu,您可以使用以下命令添加 cron 作业:

sudo crontab -e

要每小时运行一次此检查,例如:

00 * * * * /path/to/script/pingRouterCheckReboot.sh

您需要确保该脚本是可执行的(chmod +x)。

如果您发现关闭接口然后再打开就足够了,您可以改为执行此操作,例如ifdown eth0; ifup eth0。或者,结合使用以下方法:首先执行此操作,然后再次执行 ping 测试。如果连接仍未恢复,则强制采取彻底重启的激烈措施。

相关内容