Uruchom skrypt w OS X 10.6 na połączeniu sieciowym. (jak /etc/network/if-up.d/)


17

Czy jest jakiś sposób na uruchomienie skryptu, gdy interfejs sieciowy pojawi się w Mac OS X?

Próbowałem umieścić skrypt o nazwie ip-up w / etc / ppp, ale wydaje się, że nie uruchamia się po odłączeniu i ponownym połączeniu z siecią bezprzewodową.

Wolałbym nie uruchamiać zadania cron, aby stale sprawdzać, czy zmienił się status sieci. W niektórych dystrybucjach Linuksa możesz to zrobić, umieszczając skrypt w /etc/network/if-up.d/. Czy jest coś podobnego w systemie Mac OS X?

Odpowiedzi:


5

Możesz wypróbować MarcoPolo lub jedno z podobnych narzędzi wymienionych na jego stronie internetowej. Zmieniacz lokalizacji wygląda obiecująco, jeśli jesteś minimalistą.


1
Wolę to zrobić bez instalowania dodatkowych programów. Jednak link Zmieniacz lokalizacji był bardzo pomocny, ponieważ zawiera uruchomioną konfigurację do uruchamiania programu przy zmianie sieci.
— Zxaos,

1
Zxaos: Jasne, dlatego to zawarłem. Jest to w zasadzie szablon skryptu uruchomionego / bash do wszystkiego, czego chcesz. Oszczędza Ci to samodzielnego pisania kodu płyty kotłowej.
— Daniel Beck

jeśli mogę ci przeszkadzać, aby spojrzeć na to bardzo istotne q ( superuser.com/questions/265861 ) byłbym bardzo wdzięczny (jak uruchomić i zatrzymać VPN z linii poleceń w OSX). Przepraszam za nakłanianie, niezależnie od tego usunę ten komentarz za kilka godzin. Dzięki w każdym razie!
— Dan Rosenstark,

1
@ Yar Nie jest to problem, ale w Europie Środkowej jest już po północy, więc proszę zaczekać pół dnia przed pingowaniem mnie ponownie (i proszę, zrób to, jeśli nic nie pojawi się w międzyczasie, to interesujące pytanie).
— Daniel Beck

Dzięki @Daniel Beck. Jak być może już widzieliście, odpowiedzią było użycie Applescript. Prawdopodobnie dotyczy wielu rzeczy w OSX, ale często o tym zapominam.
— Dan Rosenstark,

19

Wygląda na to, że uruchomiony agent patrzy /etc/resolv.confi dwa powiązane z siecią pliki .plist poniżej /Library/Preferences/SystemConfiguration/działają dla mnie (w 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>

Wcześniej używałem tylko /etc/resolv.conf, ale były przypadki, w których to nie wystarczyło.


Było to dla mnie bardzo pomocne, ale wystąpił błąd (znaleziony przez [ta odpowiedź] [1]): <plist version="1.0">brakuje tagu otwierającego . [1] [ apple.stackexchange.com/a/181127/56862]
— LiberalArtist

@patrix (i LiberalArtist): Dzięki za korektę. Nie zauważyłem, ponieważ zadziałało to w 10.8.5. Myślę, że późniejsze wersje są bardziej surowe.
— mivk 18.04.15

@mivk Co dokładnie powinno się zmienić w tych SystemConfigurationplikach? Po podłączeniu / odłączeniu kabla sieciowego nic się nie zmienia
— IceFire 24.09.18

Wydaje się, że jest blisko, ale jeśli wyłączę i ponownie włączę Wi-Fi, program działa tylko wtedy, gdy sieć się rozłącza, a nie po ponownym połączeniu. Widzę, że /etc/resolv.confplik jest usuwany i odczytywany, gdy zmienia się stan mojego Wi-Fi, więc nie jestem pewien, dlaczego działa tylko przy rozłączeniu.
— Matt Huggins

5

Powinieneś rozważyć użycie crankd , który dokładnie pozwala na uruchamianie skryptów w odpowiedzi na wiele zdarzeń systemowych, takich jak zmiany w sieci, aktywność systemu plików, uruchamianie aplikacji itp.

Ponieważ nie mogłem znaleźć żadnej sensownej dokumentacji, napisałem również mały post na blogu na temat korzystania z crankd .


Twój blog jest chroniony przed anonimowym czytaniem. Proszę rozważyć powielenie treści tutaj.
— nfirvine

Przepraszam za to. Mój blog został przeniesiony, więc właśnie zaktualizowałem adres URL. Edytuj odpowiedź, jeśli uważasz, że niektóre informacje z mojego postu można przenieść do tej odpowiedzi.
— Juan A. Navarro

4

To wydaje się działać w bash:

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

zamień na echo changeswoje polecenie, pamiętając, że jeśli chcesz zacytować cokolwiek w swoim poleceniu, musisz użyć '\'':

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

3

ControlPlane: „Computing Sensitive Computing”

ControlPlane jest bezpośrednim portem MarcoPolo i tak naprawdę duża część konfiguracji z MarcoPolo nadal działa z ControlPlane, tylko lepiej! ControlPlane obsługuje 32-bitowe i 64-bitowe komputery Mac z procesorem Intel i systemem Snow Leopard lub nowszym.

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj


2

Zacznij od uruchomienia. Korzystając z niej, możesz być w stanie uzyskać podobną funkcjonalność.

EDYCJA : 9 lat później, może nie. Zgodnie z tym wpisem w Wikipedii :

W 2014 roku, w systemie OS X 10.10 i iOS 8, Apple przeniósł kod do uruchomienia do zamkniętego źródła libxpc


uruchomienie wydaje się być krokiem we właściwym kierunku, zwłaszcza jeśli mogę dowiedzieć się, w jaki sposób inne programy używają go do wykrywania zmian w sieci.
— Zxaos,

@Zxaos, uruchomienie wydaje się krokiem we właściwym kierunku, ale nie ma niezawodnego sposobu, aby wykrył zmiany w sieci. Zobacz moją odpowiedź na rozwiązanie wykorzystujące zamiast tego crankd .
— Juan A. Navarro

Adres URL prowadzi do strony 404.
— Slaven Rezic

@ Slaven-Rezic Zaktualizowano odpowiedź i usunął stary link.
— CaseyIT
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.