Avant de marquer comme doublon: il ne s'agit pas de DNS dynamique ou de choses similaires.
Je sais comment exécuter un script chaque fois que mes réseaux montent; il s'agit simplement d'ajouter un script dans le répertoire /etc/NetworkManager/dispatcher.d
comme celui-ci:
#!/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
Dans mon cas, myscript
c'est très simple ifconfig -a > ~/Dropbox/myifconfig.txt
--- je l'utilise parce que j'ai besoin de connaître mon adresse IP locale de partout dans l'Université, et cela changera souvent.
Jusqu'ici tout va bien, le système fonctionne bien. Mais malheureusement, le DHCP ici est configuré de telle sorte que l'IP soit parfois modifiée sans interruption / montée de l'interface. Dans ce cas, le script n'est (logiquement) pas exécuté et le fichier n'est pas mis à jour.
Je ne peux pas utiliser une approche DynDNS car le changement est dans l' IP local , pas celui visible de l'extérieur.
Je pourrais interroger, en mettant simplement le script dans cron et en l'exécutant toutes les minutes ou en écrivant un légèrement plus complexe (... si l'IP est changé, écrivez le fichier sinon ne faites rien) et en le mettant à nouveau en tâche de fond, mais il n'est pas élégant. La question est donc:
Existe-t-il un moyen de déclencher un script lorsque mon adresse IP locale change?
MISE À JOUR 1
J'ai essayé de mettre un script /etc/dhcp/dhclient-enter-hooks.d/
, basé sur l'existant /etc/dhcp/dhclient-enter-hooks.d/resolvconf
, mais il ne sera pas déclenché. Je soupçonne (confirmation nécessaire) que NM (gestionnaire de réseau) fait lui-même la négociation dhcp, sans appeler la commande dhcp ...
la source
dhclient-enter-hooks.d
script ... mais je ne l'ai jamais essayé! Le/etc/dhcp/dhclient-enter-hooks.d/resolvconf
script existant pourrait être utile en termes de syntaxe et quels signaux rechercher ("$reason" == "BOUND"
peut-être?)Réponses:
Selon la page de manuel de NetmorkManager, l'un des événements est
Je pense que vous pouvez simplement changer
à
la source
Je fournis un script qui écoute les signaux dbus, ce qui vous permettra de réagir plus rapidement que si vous interrogiez les changements sur votre configuration réseau actuelle. Cela aide sur les systèmes où les scripts / etc / ne sont pas exécutés quand vous le souhaitez (comme sur mon système 14.04).
mon entrée / sortie hooks.d ne fonctionne pas
NetworkManager démarre dhclient avec l'indicateur
-sf /usr/lib/NetworkManager/nm-dhcp-client.action
qui semble remplacer le comportement normal du hook d'entrée / sortie. Le comportement par défaut avec dhclient est d'appeler des scripts/etc/dhcp/dhclient-{enter,exit}-hooks.d
. Ceux-ci ne sont pas du tout appelés sur mon système.mes scripts NetworkManager dispatcher.d ne fonctionnent pas non plus
NM invoque cependant un ensemble différent de scripts, dans
/etc/NetworkManager/dispatcher.d
, pour informer de divers événements. La page définit l'homme NetworkManager (8)dhcp4-change
et lesdhcp6-change
actions qui semblent faire exactement ce que vous voulez. En dépit de ce que dit la page de manuel, sur mon système au moins, seulementup
et lesdown
actions s'invoquées. Je ne peux pas faire tirer ces scripts sur autre chose. Ce n'est donc pas non plus une excellente avenue pour surveiller les changements IP.donc, snoop directement sur les signaux dbus émis par NM
nm-dhcp-client.action
( source ), à partir de la ligne de commande, convertit simplement toutes les variables d'environnement définies par dhclient en un signal dbus. Ces variables d'environnement sont définies dansman dhclient-script
(8). Un intérêt particulier est$new_ip_address
. Ce que vous pourriez faire, comme suggéré par @Bernhard, est de surveiller le signal et d'agir en fonction de son contenu.Voici un programme qui espionne toutes les données d'événement signalées par ce binaire:
La sortie de dbus-monitor n'est pas simple à analyser dans les scripts. Il est peut-être plus facile de déclencher la présence d'un certain mot-clé (s), par exemple
new_ip_address
, et à partir de là, utiliser différents outils pour obtenir les informations qui ont changé (par exemple ip ou ifconfig).Donner un coup de feu!
la source
Approche d'interrogation avec script python. L'idée de base est d'analyser en continu la sortie
ip -4 -o add show <INTERFACE>
et de comparer le résultat actuel avec l'itération précédentela source
Bien que NetworkManager utilise dhclient, il fournit ses propres fichiers binaires en remplacement des scripts dhclient. (Pour référence: vous pouvez trouver le binaire NM à
/usr/lib/NetworkManager/nm-dhcp-client.action
).Vous pourriez peut-être adopter une approche différente: NM émet un signal DBus sur tous les événements. Vous pouvez écouter sur le système DBus l'événement approprié et déclencher votre script en fonction de cela ...
la source