我有一台远程访问的 Windows XP 计算机,它的网络连接状态经常会变得很奇怪 - 当您在本地计算机上时,它仍然显示为已连接,但什么都无法通过。禁用和启用网络连接可以解决问题。我猜这是一个更严重问题的征兆,但我至少要到星期一才能到机器上来解决这个问题,所以我希望找到一些实用程序或编写一个快速脚本来测试网络连接(例如telnet google.com 80
或其他东西)并重新启动网络连接(如果可能),否则重新启动机器。对此进行 Google 搜索只会显示非常复杂的应急措施,我不想在找到它之前就把自己锁在外面...有人可以建议一些简单的方法吗?或者甚至每隔几个小时自动重新启动连接的方法?
答案1
如果你要弃踢然后重启,至少要先测试一下连接;所以如果你无法通过互联网检索某些内容,那么就重启。我们可以对你在还剩 70 分钟时弃踢第二档的行为吹毛求疵,但弃踢第二档的行为很愚蠢每一个第二次失败。
编辑:经过进一步的思考和好奇,以下是使用 PowerShell 实现此目的的方法,以及一些额外想法。无需调整计划,它会自动休眠三分钟,因此只需在启动时运行一次即可(powershell -File testandpunt.ps1
)。我添加了一个简单的计数器,因此它不会重新启动,直到尝试失败三次。显然,更改这些值中的任何一个。更改serverfault.com
为,google.com
因为后者可能更快,我宁愿你抽走他们的带宽。
测试AndPunt.ps1:
$url = "http://google.com"
$i = 0 # failure count
while(1){
try{
$req=[system.Net.HttpWebRequest]::Create($url)
$req.Timeout = 10000 # in milliseconds
$res=$req.getresponse()
$res.Close()
$i=0 # got it, reset failure count
}
catch{
$i++ # failed, bump failure count
}
if( $i -eq 3 ){ # i give up, reboot
shutdown -r -t 60 -f -c "Lost connection. Rebooting in 60 seconds..."
}
Start-Sleep -s 180 # wait a bit
}
原始答案:可能有更好的方法,但我写了一个小脚本,只在连接失败时重新启动。如果你不使用或不能使用 vbs,那么 curl 或 python 或 perl 或其他任何工具都可以做同样的事情。
因此,您可以更紧密地安排时间(例如,每五分钟一次),以减少重启次数并减少连接中断的最大时间。
测试AndPunt.vbs:
Set WshShell = WScript.CreateObject("WScript.Shell")
Set http = CreateObject("Microsoft.XmlHttp")
http.open "GET", "http://serverfault.com/", FALSE
http.send ""
strData = http.ResponseText
if( len(strData) = 0 ) Then
Wscript.Echo "Restarting"
WshShell.Run "%SystemRoot%\System32\shutdown.exe -r -t 600"
End If
set WshShell = nothing
set http = nothing
答案2
在命令提示符下,您可以使用:
netsh 接口设置接口“本地连接”禁用
netsh 接口设置接口“本地连接”启用
您可以将其粘贴到新的文本文件中,使用.BAT
或.CMD
扩展名保存,然后设置计划任务以根据需要经常启动。
不过,我建议尝试更新驱动程序,如果不行的话,就买一个 PCI 网卡,你可以花大约 2 英镑买到便宜的网卡,它完全可以完成这项工作。
答案3
我现在所做的是每 30 分钟安排以下任务:
%SystemRoot%\System32\shutdown.exe -r -t 600
所以如果它死机了,最坏的情况是我会在 40 分钟内恢复。这意味着我必须shutdown -a
在使用它时做好准备。
有人知道每半小时重启一次机器是否会造成危害吗?