Daher verliert mein Mac manchmal die Verbindung zum Internet.
Wenn ich physisch davor bin, kann ich das Terminal verwenden und Folgendes tun, um es zu reparieren:
networksetup -setnetworkserviceenabled ethernet off
Geben Sie dann mein Passwort ein:
networksetup -setnetworkserviceenabled ethernet on
und geben Sie mein Passwort erneut ein.
Die Sache ist die, dass die Maschine mehrere Server hostet und ich brauche, dass sie laufen, auch wenn ich nicht physisch anwesend bin. Also wollte ich ein tägliches Skript ausführen, das dies tut, wenn ich nicht anwesend bin, und sicherstellen, dass die Verbindung mindestens einmal am Tag zurückgesetzt wird. Aber da ich keine Möglichkeit gefunden habe, mein Passwort in die Befehlszeile einzufügen, kann ich das nicht tun.
Meine Frage ist also: Ist es möglich, das zu tun, was ich beschrieben habe?
Ok, danke Batman für den Vorschlag, die Sudoer-Datei zu bearbeiten. Anstelle von crontab oder launchd, um es einmal am Tag zu planen (was sowieso nicht gut genug war), habe ich stattdessen dieses Applescript geschrieben, um es regelmäßiger zu tun, und bisher scheint es zu funktionieren:
repeat
repeat
try
do shell script "ping -t 15 8.8.8.8"
exit repeat
on error
display notification "Reconnection attempt"
do shell script "sudo networksetup -setnetworkserviceenabled ethernet off"
do shell script "sudo networksetup -setnetworkserviceenabled ethernet on"
delay 9
display notification "Connection should be established"
end try
end repeat
delay 5
end repeat
Ich füge weitere Details hinzu: Ich habe es als .app exportiert und dann die .plist davon mit den Zeilen bearbeitet:
<key>LSBackgroundOnly</key>
<string>1</string>
Um es unsichtbar zu machen, wenn es läuft (kein Dock-Symbol), und schließlich habe ich es beim Anmelden ausgeführt.
Mit sudo können Sie einen Befehl mit einer erhöhten Berechtigungsstufe ausführen. Sie können die sudoers-Datei bearbeiten, indem Sie sie ausführen
sudo visudo
Eine Möglichkeit, dies zu tun, besteht darin, Ihrer sudoers-Datei zunächst eine Zeile hinzuzufügen, die es ermöglicht, die aufgeführten Befehle ohne Passwort auszuführen. Indem Sie den spezifischen Befehl zu Ihrer sudoers-Datei hinzufügen, können Sie zulassen, dass die gewünschten Befehle ohne Passwort ausgeführt werden. Sie können dies tun, indem Sie die folgenden 2 Zeilen in Ihre sudoers-Datei eingeben (die Datei, die geöffnet wird, wenn Sie "sudo visudo" ausführen):
Benutzer ALL=(ALL) NOPASSWD: /usr/sbin/networksetup -setnetworkserviceenabled Ethernet ein Benutzer ALL=(ALL) NOPASSWD: /usr/sbin/networksetup -setnetworkserviceenabled Ethernet aus
wobei "Benutzer" durch Ihren Benutzernamen ersetzt wird.
Dann können Sie als Ihr Benutzer crontab verwenden, um regelmäßig etwas auszuführen
crontab -e
und füge die Zeilen hinzu:
0 1 * * * sudo networksetup -setnetworkserviceenabled ethernet off && sudo networksetup -setnetworkserviceenabled ethernet on
Dadurch wird dieser Neustart jeden Tag um 1 Uhr morgens angewendet.
Eine andere Lösung: Fügen Sie die Befehle direkt zur crontab von root hinzu:
sudo -s
crontab -e
Geben Sie dann die Zeile ein
0 1 * * * networksetup -setnetworkserviceenabled Ethernet aus && networksetup -setnetworkserviceenabled Ethernet ein
und speichern und beenden.
Möglicherweise möchten Sie dies in eine Art Skript einfügen, das Sie darüber informiert, dass das Netzwerk erfolgreich neu gestartet wurde (z. B. mit einer E-Mail oder so), damit Sie sicher sind, dass es funktioniert hat.
Alternativ können Sie ein launchd-Skript verwenden.
Rob de Jonge
mmmmmm
NicolasPP