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?

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.


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.


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 .


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 '\''&'\''")}'

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


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.