我有一台旧台式机,我在上大学期间把它作为家里的 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 测试。如果连接仍未恢复,则强制采取彻底重启的激烈措施。