web-dev-qa-db-fra.com

Comment exécuter un script après que DHCP a attribué une adresse IP au démarrage?

J'ai écrit un script Shell qui envoie mon adresse IP actuelle dans un dossier Google Drive pour faciliter la connexion à un Raspberry Pi. Un autre script sur mon ordinateur portable récupère l'adresse IP et se connecte. Le script fonctionne correctement lorsque je l'exécute à partir de la ligne de commande, mais je ne parviens pas à l'exécuter au démarrage après l'attribution de l'adresse IP.

J'ai essayé crontab mais le script s'exécute avant que l'adresse IP ne soit attribuée. Je ne souhaite pas définir de minuterie ni utiliser une boucle while pour attendre une adresse IP, cela ne semble pas très efficace. J'essaie d'exécuter mon script pendant le processus de démarrage, mais après l'exécution de DHCP. J'ai essayé d'ajouter le chemin à relancer dans la fonction allinterfaceup () mais cela n'a pas fonctionné non plus. Toute aide serait appréciée.

Raspberry Pi 3, Ubuntu Mate 16.04 LTS

scénario:

#!/bin/sh

#if ([ $reason = "BOUND" ] || [ $reason = "RENEW" ] )
#then

        echo `hostname -I | cut -d' ' -f1 ` > ~/ipAddr/ip.txt

        rclone copy ~/ipAddr/ip.txt remote:pi 
#fi
2
dpoiesz

Crochets


Il y a un éventail de possibilités pour faire cela.

Si vous voulez exécuter votre script " après l'exécution de DHCP ", alors les crochets sont ce qu'il vous faut !

dhclient exécutera tout dans le répertoire /etc/dhcp/dhclient-exit-hooks.d/ après sa sortie. *

C'est une bonne pratique de lier votre script au répertoire plutôt que de le placer là-bas - mais les deux fonctionnent.

ln -s /path/to/your/script  /etc/dhcp/dhclient-exit-hooks.d/name_of_your_script

(*) Cependant, dhclient ne "sort" pas en soi, mais continue de fonctionner et d'exécuter ("sources") ce répertoire chaque fois qu'il fait quelque chose pour une raison .

Donc, pour empêcher que votre script soit exécuté de nombreuses fois, je vous suggère de l'envelopper avec une "instruction if" pour l'exécuter uniquement si l'adresse IP est liée ou renouvelée de la manière suivante:

if ([ $reason = "BOUND" ] || [ $reason = "RENEW" ])
then

# your script commands here

fi
4
Robert Riedl