Se você for puntar e reiniciar, pelo menos teste a conexão primeiro; Então, se você não pode recuperar algo pela internet, então reinicie. Nós podemos discutir sobre você apostar no segundo down com 70 para ir, mas é besteira puntar em todo segundo abaixo.
EDIT: Depois de mais reflexão e curiosidade, aqui está a maneira do PowerShell de fazer isso, com algumas ideias de bônus. Não há necessidade de mexer com agendas, ele automaticamente dorme por três minutos, então basta executá-lo uma vez na inicialização ( powershell -File testandpunt.ps1
). Eu adicionei um contador simples, por isso não reinicia até três tentativas falhadas. Obviamente, altere qualquer um desses valores. serverfault.com
to google.com
foi alterado, pois o último provavelmente é mais rápido e eu preferiria que você extraísse a largura de banda deles.
TestAndPunt.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
}
RESPOSTA ORIGINAL: Provavelmente existem maneiras melhores, mas escrevi um pequeno script para reiniciar apenas se a conexão falhar. Se você não usa ou não pode usar vbs, em seguida, curl ou python ou perl ou qualquer coisa que possa fazer a mesma coisa.
Assim, você poderá programá-lo com mais firmeza - digamos, a cada cinco minutos - para reduzir as reinicializações e reduzir o tempo máximo de conexão.
TestAndPunt.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