Vor dem Markieren als Duplikat: Hier geht es nicht um dynamisches DNS oder ähnliches.
Ich kann jedes Mal ein Skript ausführen, wenn mein Netzwerk hochfährt. Es ist ganz einfach, ein Skript in das Verzeichnis /etc/NetworkManager/dispatcher.d
wie dieses einzufügen:
#!/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
In meinem Fall myscript
ist es sehr einfach ifconfig -a > ~/Dropbox/myifconfig.txt
- ich benutze es, weil ich meine lokale IP von überall in der Universität kennen muss, und es wird sich oft ändern.
Soweit so gut, das System funktioniert einwandfrei. Aber leider ist das DHCP hier so konfiguriert, dass die IP irgendwann ohne ein Down / Up der Schnittstelle geändert wird. In diesem Fall wird das Skript (logisch) nicht ausgeführt und die Datei wird nicht aktualisiert.
Ich kann keinen DynDNS-Ansatz verwenden, da sich die Änderung auf die lokale IP bezieht und nicht auf die extern sichtbare.
Ich könnte abfragen, indem ich einfach das Skript in cron lege und es jede Minute ausführe oder ein etwas komplexeres schreibe (... wenn die IP geändert wird, schreibe die Datei sonst nichts) und es erneut als Hintergrundaufgabe ablege, aber es ist nicht elegant. Die Frage ist also:
Gibt es eine Möglichkeit, ein Skript auszulösen, wenn sich meine lokale IP ändert?
UPDATE 1
Ich habe versucht, ein Skript /etc/dhcp/dhclient-enter-hooks.d/
basierend auf dem vorhandenen einzufügen /etc/dhcp/dhclient-enter-hooks.d/resolvconf
, aber es wird nicht ausgelöst. Ich vermute (Bestätigung erforderlich), dass NM (Netzwerkmanager) die DHCP-Aushandlung selbst durchführt, ohne den DHCP-Befehl aufzurufen ...
quelle
dhclient-enter-hooks.d
... aber ich habe es nie ausprobiert! Das vorhandene/etc/dhcp/dhclient-enter-hooks.d/resolvconf
Skript könnte in Bezug auf die Syntax und die zu"$reason" == "BOUND"
Antworten:
Laut der Manpage für NetmorkManager ist eines der Ereignisse
Ich denke du kannst dich einfach ändern
zu
quelle
Ich stelle ein Skript zur Verfügung, das dbus-Signale abhört, sodass Sie schneller reagieren können, als wenn Sie nach Änderungen an Ihrer aktuellen Netzwerkkonfiguration suchen würden. Es hilft auf Systemen, auf denen Skripte / etc / nicht ausgeführt werden, wenn Sie dies möchten (wie auf meinem 14.04-System).
Meine Ein- / Ausstiegshaken funktionieren nicht
NetworkManager startet dhclient mit dem Flag,
-sf /usr/lib/NetworkManager/nm-dhcp-client.action
das das normale Ein- / Ausstiegsverhalten zu überschreiben scheint. Das Standardverhalten mit dhclient ist das Aufrufen von Skripten/etc/dhcp/dhclient-{enter,exit}-hooks.d
. Diese werden auf meinem System überhaupt nicht aufgerufen.Auch meine NetworkManager-Skripte "dispatcher.d" funktionieren nicht
NM ruft jedoch einen anderen Satz von Skripten auf
/etc/NetworkManager/dispatcher.d
, um über verschiedene Ereignisse zu informieren. Der Networkmanager (8) man - Seite definiertdhcp4-change
unddhcp6-change
Aktionen , die genau das zu tun scheint , was Sie wollen. Trotz allem , was zumindest die Manpage sagt, auf meinem System, nurup
unddown
bekommen Aktionen aufgerufen. Ich kann diese Skripte nicht dazu bringen, auf irgendetwas anderes zu schießen. Daher ist dies auch kein guter Weg, um IP-Änderungen zu überwachen.Schnüffeln Sie also direkt auf den von NM ausgegebenen D-Bus-Signalen
nm-dhcp-client.action
( source ) konvertiert von der Befehlszeile aus einfach alle Umgebungsvariablen, die von dhclient festgelegt wurden, in ein dbus-Signal. Diese Umgebungsvariablen sind inman dhclient-script
(8) definiert. Eines von besonderem Interesse ist$new_ip_address
. Wie von @Bernhard vorgeschlagen, können Sie das Signal überwachen und auf der Grundlage seines Inhalts entsprechend handeln.Hier ist ein Programm, das alle von dieser Binärdatei signalisierten Ereignisdaten aufspürt:
Die Ausgabe von dbus-monitor ist nicht einfach in Skripten zu analysieren. Vielleicht ist es einfacher, das Vorhandensein eines bestimmten Schlüsselworts auszulösen, z. B.
new_ip_address
, und von dort aus verschiedene Tools zu verwenden, um die geänderten Informationen abzurufen (z. B. ip oder ifconfig).Versuch es einmal!
quelle
Polling-Ansatz mit Python-Skript. Die Grundidee besteht darin, die Ausgabe des
ip -4 -o add show <INTERFACE>
aktuellen Ergebnisses kontinuierlich zu analysieren und mit der vorherigen Iteration zu vergleichenquelle
Obwohl NetworkManager dhclient verwendet, stellt es seine eigenen Binärdateien als Ersatz für die dhclient-Skripte bereit. (Als Referenz: Sie finden die NM-Binärdatei unter
/usr/lib/NetworkManager/nm-dhcp-client.action
).Vielleicht könnten Sie einen anderen Ansatz wählen: NM gibt bei allen Ereignissen ein DBus-Signal aus. Sie könnten auf dem System-DBus nach dem passenden Ereignis suchen und Ihr Skript auf dieser Basis auslösen ...
quelle