Führen Sie das Skript in OS X 10.6 über eine Netzwerkverbindung aus. (wie /etc/network/if-up.d/)

17

Gibt es eine Möglichkeit, ein Skript auszuführen, wenn eine Netzwerkschnittstelle in Mac OS X angezeigt wird?

Ich habe versucht, ein Skript mit dem Namen ip-up in / etc / ppp abzulegen, aber es scheint nicht zu funktionieren, wenn ich die Verbindung zu einem drahtlosen Netzwerk trenne und wieder herstelle.

Ich würde es vorziehen, keinen Cron-Job ausführen zu müssen, um ständig zu überprüfen, ob sich der Netzwerkstatus geändert hat. In einigen Linux-Distributionen können Sie dies erreichen, indem Sie ein Skript in /etc/network/if-up.d/ einfügen. Gibt es etwas Ähnliches für Mac OS X?

Zxaos
quelle

Antworten:

5

Versuchen Sie es mit MarcoPolo oder einem ähnlichen Dienstprogramm, das auf der Website aufgeführt ist. Location Changer sieht vielversprechend aus, wenn Sie ein Minimalist sind.

Daniel Beck
quelle
1
Ich würde es vorziehen, ohne zusätzliche Programme zu installieren. Der Location Changer-Link war jedoch sehr hilfreich, da er eine Startkonfiguration zum Ausführen des Programms bei einer Netzwerkänderung enthält.
Zxaos 20.10.10
1
Zxaos: Klar, deshalb habe ich es aufgenommen. Es ist im Grunde eine launchd / bash-Skriptvorlage für alles, was Sie wollen. Spart Ihnen, den Code für das Boilerplate selbst zu schreiben.
Daniel Beck
Wenn ich Sie stören kann, sich dieses sehr relevante q anzusehen ( superuser.com/questions/265861 ), würde ich es sehr begrüßen (wie man vpn über die Befehlszeile unter OSX startet und stoppt). Entschuldigen Sie die Aufforderung, ich werde diesen Kommentar in ein paar Stunden trotzdem löschen. Danke auf jeden Fall!
Dan Rosenstark
1
@Yar Kein Problem, aber in Mitteleuropa ist es gerade nach Mitternacht. Warten Sie also einen halben Tag, bevor Sie mich erneut anpingen (und tun Sie dies bitte, wenn in der Zwischenzeit nichts passiert, ist dies eine interessante Frage).
Daniel Beck
Danke @Daniel Beck. Wie Sie vielleicht bereits gesehen haben, war die Verwendung von Applescript die Antwort. Es liegt wahrscheinlich an vielen Dingen unter OSX, aber ich vergesse es oft.
Dan Rosenstark
19

Ein Started Agent /etc/resolv.confund zwei netzwerkbezogene .plist-Dateien /Library/Preferences/SystemConfiguration/scheinen für mich zu funktionieren (unter Mac OS X 10.8.4):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" \
 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>ifup.ddns</string>

  <key>LowPriorityIO</key>
  <true/>

  <key>ProgramArguments</key>
  <array>
    <string>/Users/Shared/bin/ddns-update.sh</string>
  </array>

  <key>WatchPaths</key>
  <array>
    <string>/etc/resolv.conf</string>
    <string>/Library/Preferences/SystemConfiguration/NetworkInterfaces.plist</string>
    <string>/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist</string>
  </array>

  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Ich hatte vorher nur /etc/resolv.conf verwendet, aber es gab Fälle, in denen das nicht genug war.

mivk
quelle
Das war sehr hilfreich für mich, aber es gibt einen Fehler (gefunden von [diese Antwort] [1]): das Eröffnungs- <plist version="1.0">Tag fehlt. [1] [ apple.stackexchange.com/a/181127/56862]
LiberalArtist
@patrix (und LiberalArtist): Danke für die Korrektur. Ich hatte es nicht bemerkt, weil es bei mir in 10.8.5 geklappt hat. Ich denke, spätere Versionen sind strenger.
Mivk
@mivk Was genau soll sich in diesen SystemConfigurationDateien ändern ? Wenn ich ein Netzwerkkabel ein- oder ausstecke, scheint sich nichts zu ändern
IceFire
Dies scheint in der Nähe zu sein, aber wenn ich WLAN aus- und wieder einschalte, wird das Programm nur ausgeführt, wenn die Verbindung zum Netzwerk getrennt wird, nicht, wenn die Verbindung wieder hergestellt wird. Ich sehe, dass die /etc/resolv.confDatei gelöscht und gelesen wird, wenn sich mein WLAN-Status ändert, daher bin ich mir nicht sicher, warum sie nur beim Trennen der Verbindung ausgeführt wird.
Matt Huggins
5

Sie sollten die Verwendung von crankd in Betracht ziehen , mit dem Sie Skripte genau dann ausführen können, wenn auf viele Systemereignisse wie Netzwerkänderungen, Dateisystemaktivität, Anwendungsstart usw. reagiert wird.

Da ich keine vernünftige Dokumentation finden konnte, schrieb ich auch einen kleinen Blog-Beitrag über die ersten Schritte mit Crankd .

Juan A. Navarro
quelle
Ihr Blog ist vor anonymem Lesen geschützt. Bitte denken Sie daran, den Inhalt hier zu duplizieren.
Nfirvine
Das tut mir leid. Mein Blog ist umgezogen, daher habe ich gerade die URL aktualisiert. Sie können die Antwort jederzeit bearbeiten, wenn Sie der Meinung sind, dass einige Informationen aus meinem Beitrag in diese Antwort migriert werden könnten.
Juan A. Navarro
4

Dies scheint in bash zu funktionieren:

(echo -e "n.add State:/Network/Global/IPv4\nn.watch" & cat) | \
 scutil | \
 awk '/notification/ {system("echo change")}'

Ersetzen Sie echo changemit Ihrem Befehl, wobei Sie berücksichtigen, dass Sie Folgendes verwenden müssen, wenn Sie irgendetwas in Ihrem Befehl zitieren müssen '\'':

(echo -e "n.add State:/Network/Global/IPv4\nn.watch" & cat) | \
 scutil | \
 awk '/notification/ {system("echo '\''&'\''")}'
Joe Hildebrand
quelle
3

ControlPlane: „Kontextsensitives Rechnen“

ControlPlane ist ein direkter Port von MarcoPolo und in der Tat funktioniert ein Großteil der Konfiguration von MarcoPolo immer noch mit ControlPlane, nur besser! ControlPlane unterstützt Intel-basierte 32- und 64-Bit-Macs mit Snow Leopard und höher.

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

cwd
quelle
2

Beginnen Sie mit launchd. Möglicherweise können Sie ähnliche Funktionen verwenden.

EDIT : 9 Jahre später vielleicht nicht. Laut diesem Wikipedia-Eintrag :

Im Jahr 2014 hat Apple mit OS X 10.10 und iOS 8 den Code für launchd auf die Closed Source-Version von libxpc verschoben

CaseyIT
quelle
launchd scheint ein Schritt in die richtige Richtung zu sein, besonders wenn ich herausfinden kann, wie andere Programme es verwenden, um Netzwerkänderungen zu erkennen.
Zxaos,
@Zxaos, launchd scheint ein Schritt in die richtige Richtung zu sein, aber es gibt keine zuverlässige Möglichkeit, Netzwerkänderungen zu erkennen. Siehe meine Antwort für eine Lösung mit Crankd statt.
Juan A. Navarro
Die URL führt zu einer 404-Seite.
Slaven Rezic
@ Slaven-Rezic Antwort aktualisiert und alten Link entfernt.
CaseyIT