Chaque script situé dans /etc/network/if-up.d est-il exécuté lorsqu'une interface est lancée?

12

Tous les scripts dans /etc/network/if-up.d sont-ils exécutés lorsqu'une interface réseau est lancée?

Si oui, à quoi sert la commande de post-up dans le fichier d'interface?

Broche
la source
1
Tout le contenu des dossiers " .d" est conventionnellement exécuté. Certains d'entre eux ont en fait besoin d'une extension de nom de fichier " .sh". Tous les fichiers doivent être exécutables.
kolypto

Réponses:

14

Oui, généralement, tout script marqué comme exécutable et placé dans ce dossier est exécuté. Les fichiers ne sont limités à un ensemble spécifique de noms car run-parts est utilisé.

Le post-upfait la même chose que l'utilisation up. Placer un script dans if-up.d revient à utiliser simplement un post-upqui pointe vers un script ou une commande ailleurs. Habituellement, vous utiliseriez le up | post-up lorsque vous aviez juste besoin d'exécuter une seule commande pour une seule interface. Lorsque vous avez quelque chose de plus complexe, vous créez un script.

interfaces homme

...
up command

post-up command
      Run  command  after  bringing the interface up.  If this command
      fails then ifup aborts, refraining from marking the interface as
      configured  (even  though it has really been configured), prints
      an error message, and exits with status 0.   This  behavior  may
      change in the future.
...
There  exists  for  each  of  the  above  mentioned options a directory
/etc/network/if-<option>.d/ the scripts in which are run (with no argu-
ments) using run-parts(8) after the option itself has been processed.

homme run-parts

run-parts  runs  all  the  executable  files  named  within constraints
described below,

If  the  --lsbsysinit  option  is not given then the names must consist
entirely of upper and lower  case  letters,  digits,  underscores,  and
hyphens.
...
Files are run in the lexical sort  order  of  their  names  unless  the
--reverse  option  is given, in which case they are run in the opposite
order.
Zoredache
la source
1
Donc, si vous voulez qu'un script soit exécuté uniquement après que l'interface est en place et qu'il a besoin de trucs dans le dossier if-up.d pour être prêt, vous devez soit le nommer pour qu'il tombe dans l'ordre lexical après la commande que vous devez utiliser ou placez-le dans un autre répertoire et exécutez-le via la commande post-up. Est-ce que ça sonne bien?
Spig
1
Oui je crois bien.
Zoredache
1
Une si belle réponse détaillée. Même 10 ans plus tard, nous fournissons toujours des informations.
Xofo
Vous devez vraiment lire attentivement la page de manuel run-parts afin de reconnaître que même les scripts avec un nom de fichier par ailleurs correct utilisant l'extension .sh ne s'exécuteront pas. Citation: "... cela aiderait beaucoup s'il y avait des informations sur le fait de sauter un script à cause d'un point. J'ai perdu beaucoup de temps à dépanner ... la déclaration '... les noms doivent être entièrement composés de majuscules et de minuscules lettres, chiffres, traits de soulignement et tirets. » n'est pas suffisant. Je l'ai lu deux fois et cela ne m'a pas aidé à comprendre où se trouve mon problème. Il devrait être explicitement écrit que les scripts avec des points sont ignorés. "
ChrisW
Ce 'bug' est "ne sera pas corrigé" dans Debian: run-parts n'exécute pas de script avec l'extension sh bugs.launchpad.net/ubuntu/+source/debianutils/+bug/38022
ChrisW