Manchmal muss ich sehr große Dateien aus dem Internet mit Torrents herunterladen (ich verwende Transmission) und das Wi-Fi fällt immer aus. Ich habe mehrere Router und Modems gekauft und keines davon funktioniert. Ich habe dieses Problem schon seit einiger Zeit (~ 10 Jahre, sowohl mit Windows als auch mit Mac).
Jetzt habe ich beschlossen, ein bisschen zu lernen und ein AppleScript zu schreiben, das sich automatisch wieder verbindet:
repeat
if (do shell script "curl --connect-timeout 1 <WIFI_IP>") = "curl: (7) couldn't connect to host" then
do shell script "networksetup -setairportpower AirPort off"
do shell script "networksetup -setairportpower AirPort on"
do shell script "networksetup -setairportnetwork en1 <ROUTER_NAME> <ROUTER_PASS>"
end if
end repeat
Das Teil nach then
der Arbeit trennt es von Wi-Fi und verbindet es wieder, aber das Problem liegt bei dem if
Teil, weil ich nicht weiß, wie ich erkennen kann, wann die Wi-Fi-Verbindung durch den Torrent unterbrochen wird. Wie soll ich das machen?
Außerdem wäre eine Wiederholung mit Intervall wirklich schön, so etwas wie: repeat every 10 seconds
.
Hier ist ein einfacher Applescript-Handler, den ich vor einiger Zeit geschrieben habe, um genau dieses Problem zu lösen. Es pingt den OpenDNS-Server (beide aus Redundanzgründen) an, um zu prüfen, ob die Internetverbindung besteht. Es gibt true bei Erfolg zurück, false bei Misserfolg. Kopieren Sie es einfach in Ihr Skript und nennen Sie es wie folgt:
set connected to checkInternetConnection
Dann können Sie alles, was Sie tun möchten, in eine if-Anweisung schreiben:
if connected then
-- Do stuff here
end if
Der Handler:
on checkInternetConnection()
-- Ping the primary OpenDNS server.
try
set pingResult1 to do shell script "ping -c 1 208.67.222.222"
on error
set pingResult1 to ""
end try
-- Check the results returned and return true or false.
set p to number of paragraphs in pingResult1
if p < 5 then
-- Ping another Open DNS server for redundancy.
try
set pingResult2 to do shell script "ping -c 1 208.67.220.2220"
on error
set pingResult2 to ""
end try
set p to number of paragraphs in pingResult2
if p < 5 then return false
else
return true
end if
end checkInternetConnection
Can’t make «handler checkInternetConnection» into type boolean
Zu Hause betreue ich ein Perl-Skript namens ping-random-server. Immer wenn ich ein Netzwerkproblem vermute, führe ich es aus. Ping ist auch eine Option für Sie. Führen Sie einen Ping-Befehl mit einer begrenzten Anzahl von Pings gegen eine IP-Adresse oder einen Hostnamen aus, von dem bekannt ist, dass er auf Ping reagiert, und ergreifen Sie Maßnahmen, wenn der Ping 100 % Paketverlust zurückgibt.
Versuchen Sie, dies in Ihr Applescript einzufügen
if (do Shell script "ping -c 10 www.whitehouse.gov | grep transmitted") = "10 Pakete übertragen, 0 Pakete empfangen, 100,0 % Paketverlust"
Ich habe dies nicht anders getestet, als die Ping-Befehle im Terminal auszuführen und die Ausgabe zu untersuchen.
Vickash
delay 300
kurz vor hinzufügenrepeat end
, um zu verhindern, dass das Skript ständig nach einer Verbindung sucht. 300 Sekunden würde es alle 5 Minuten überprüfen lassen.