Przed oznaczeniem jako duplikat: nie chodzi o dynamiczny DNS lub podobne rzeczy.
Wiem, jak uruchomić skrypt za każdym razem, gdy moje sieci się zwiększają; wystarczy dodać skrypt do katalogu /etc/NetworkManager/dispatcher.d
takiego jak ten:
#!/bin/bash
IF=$1
STATUS=$2
case "$2" in
up)
logger -s "NM Script up $IF triggered"
su rmano -c /home/romano/bin/myscript
;;
down)
logger -s "NM Script down $IF triggered"
;;
*)
;;
esac
W moim przypadku myscript
jest to bardzo proste ifconfig -a > ~/Dropbox/myifconfig.txt
--- używam go, ponieważ muszę znać moje lokalne IP z dowolnego miejsca na Uniwersytecie i to się często zmienia.
Jak dotąd tak dobrze, system działa dobrze. Niestety, tutaj DHCP jest skonfigurowany tak, że adres IP jest czasem zmieniany bez wyłączania / zwiększania interfejsu. W takim przypadku skrypt nie jest (logicznie) uruchamiany, a plik nie jest aktualizowany.
Nie mogę użyć podejścia DynDNS, ponieważ zmiana dotyczy lokalnego adresu IP, a nie zewnętrznego.
Mógłbym sondować, po prostu umieszczając skrypt w cronie i uruchamiając go co minutę lub pisząc nieco bardziej skomplikowany (... jeśli IP zostanie zmieniony, napisz plik, w przeciwnym razie nic nie rób) i umieszczając go ponownie jako zadanie w tle, ale to nie jest elegancki. Pytanie brzmi:
Czy jest jakiś sposób, aby uruchomić skrypt, gdy zmieni się mój lokalny adres IP?
AKTUALIZACJA 1
Próbowałem umieścić skrypt w /etc/dhcp/dhclient-enter-hooks.d/
oparciu o istniejący /etc/dhcp/dhclient-enter-hooks.d/resolvconf
, ale nie zostanie on uruchomiony. Podejrzewam (wymagane potwierdzenie), że NM (menedżer sieci) sam negocjuje protokół dhcp, bez wywoływania polecenia dhcp ...
źródło
dhclient-enter-hooks.d
skryptu ... ale nigdy tego nie próbowałem! Istniejący/etc/dhcp/dhclient-enter-hooks.d/resolvconf
skrypt może być pomocny pod względem składni i jakich sygnałów szukać ("$reason" == "BOUND"
być może?)Odpowiedzi:
Według strony podręcznika NetmorkManager jedno ze zdarzeń to
Myślę, że możesz po prostu zmienić
do
źródło
Dostarczam skrypt, który nasłuchuje na sygnałach dbus, co pozwoli ci zareagować szybciej niż gdybyś sondował zmiany w obecnej konfiguracji sieci. Pomaga w systemach, w których skrypty / etc / nie są wykonywane, kiedy chcesz (tak jak w moim systemie 14.04).
moje haki wejścia / wyjścia. d nie działają
NetworkManager uruchamia dhclient z flagą,
-sf /usr/lib/NetworkManager/nm-dhcp-client.action
która wydaje się zastępować normalne zachowanie przechwytywania wejścia / wyjścia. Domyślnym działaniem dhclient jest wywoływanie skryptów/etc/dhcp/dhclient-{enter,exit}-hooks.d
. Te w ogóle nie są wywoływane w moim systemie.moje skrypty dispatcher.d NetworkManager również nie działają
NM wywołuje jednak inny zestaw skryptów w
/etc/NetworkManager/dispatcher.d
celu informowania o różnych zdarzeniach. Strona man NetworkManager (8) definiujedhcp4-change
idhcp6-change
akcje, które wydają się robić dokładnie to, co chcesz. Wbrew temu, co twierdzi strona podręcznika, w moim systemie co najmniej, tylkoup
idown
działania się powoływać. Nie mogę zmusić tych skryptów do odpalenia na czymkolwiek innym. Dlatego też nie jest to świetna droga do monitorowania zmian IP.więc snoop bezpośrednio na sygnałach dbus emitowanych przez NM
nm-dhcp-client.action
( źródło ), z wiersza poleceń, po prostu konwertuje wszystkie zmienne środowiskowe ustawione przez dhclient na sygnał dbus. Te zmienne środowiskowe są zdefiniowane wman dhclient-script
(8). Jednym ze szczególnie interesujących jest$new_ip_address
. Jak sugeruje @Bernhard, możesz zrobić, aby monitorować sygnał i odpowiednio postępować w oparciu o jego zawartość.Oto program, który podejmie wszystkie dane zdarzenia zasygnalizowane przez ten plik binarny:
Dane wyjściowe dbus-monitor nie są łatwe do przeanalizowania w skryptach. Być może łatwiej jest wywołać obecność określonych słów kluczowych, np.
new_ip_address
I stamtąd użyć różnych narzędzi, aby uzyskać informacje, które uległy zmianie (np. Ip lub ifconfig).Spróbuj!
źródło
Podejście ankietowe ze skryptem python. Podstawową ideą jest ciągłe analizowanie wyników
ip -4 -o add show <INTERFACE>
i porównywanie bieżącego wyniku z poprzednią iteracjąźródło
Chociaż NetworkManager używa dhclient, udostępnia własne pliki binarne jako zamiennik skryptów dhclient. (W celach informacyjnych: można znaleźć plik binarny NM w
/usr/lib/NetworkManager/nm-dhcp-client.action
).Być może możesz przyjąć inne podejście: NM wydaje sygnał DBus na wszystkie zdarzenia. Możesz nasłuchiwać w systemie DBus odpowiedniego zdarzenia i uruchomić skrypt w oparciu o to ...
źródło