Voici le contenu de /etc/network/interfaces
:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
post-up /etc/network/if-up.d/sshstart
Et sshstart
est un script avec les éléments suivants:
curl something something darkside send a file over ftps in the background &
/usr/bin/autossh -M 0 -f -N -o ServerAliveInterval=15 -o ServerAliveCountMax=3 -R 127.0.0.1:2005:127.0.0.1:22 -R 192.168.1.10:2006:192.168.2.110:1912 -L 127.0.0.1:5249:192.168.1.212:5249 [email protected] -p 8080
Lorsque la machine redémarre, la curl
commande est exécutée plusieurs fois, le fichier se termine 2 ou 3 fois sur le serveur ftp et quand je regarde les processus, il semble qu'il y ait plusieurs instances d'exécution automatique ... Je ne sais pas si c'est comme ça autossh fait des choses ou non, mais à coup sûr curl ne devrait pas télécharger le fichier plusieurs fois.
Mon intuition est que le sshstart
script entier est exécuté plusieurs fois mais je ne comprends pas pourquoi.
J'ai essayé de rechercher des détails sur le processus de configuration du réseau au démarrage mais tout ce que j'ai pu trouver était des informations de syntaxe pour le fichier d'interfaces.
Quelqu'un peut-il aider s'il vous plaît?
Je vous remercie.
--- Modifier ---
Comme suggéré ci-dessous, j'ai modifié mon fichier d'interfaces comme suit (supprimé les lignes vides ci-dessus post-up):
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
post-up /etc/network/if-up.d/sshstart
Et ajouté la ligne suivante à sshstart:
echo $(date)>>/run/shm/sshstart.log
Voici le contenu /run/shm/sshstart.log
après un redémarrage:
Wed Oct 29 08:07:00 EDT 2014
Wed Oct 29 08:07:07 EDT 2014
Wed Oct 29 08:07:07 EDT 2014
Wed Oct 29 08:07:07 EDT 2014
Donc ça a été couru 4 fois :( que se passe-t-il?
echo $(date)
est un peu maladroit et indirect. Autant épeler ça quedate
. Similaire à Useless Use of Cat Award .Réponses:
Les fichiers sont
/etc/network/if-up.d
déjà exécutés automatiquement chaque fois qu'une interface (n'importe quelle interface) apparaît. Lorsque vous spécifiez le même script à réexécuter dans unepost-up
commande explicite , vous ne faites que réexécuter le script. Donc, je suppose que c'est ce qui devrait arriver:lo
apparaît (avec une variable d'environnementIFACE=lo
) car il se trouve dans/etc/network/if-up.d
.eth0
apparaît (avec la variable d'environnementIFACE=eth0
) pour la même raison.eth0
apparaît (avec la variable d'environnementIFACE
non définie) parce que vous l'avez demandé dans unepost-up
directive.Je ne sais pas d'où vient la quatrième fois, mais de toute façon, c'est déjà trois.
Vous devez soit localiser le script ailleurs et l'exécuter une fois à l'aide d'une
post-up
directive, soit le laisser là où il se trouve, mais ne le mentionnez pas dans unepost-up
directive et vérifier la valeur de$IFACE
afin qu'il ne fasse rien à moins que l'interface souhaitée (eth0
) ne soit venue vers le haut.la source
--all
. Il semble qu'il existe une fonctionnalité pour exécuter lesif-up.d
scripts une dernière fois avec cet argument pour signaler que toutes les interfaces sont maintenant en place, au cas où certains scripts voudraient prendre une action une fois qu'il est connu qu'aucune autre interface n'est en attente. Cela explique la quatrième fois.Comme indiqué par Celada, les
/etc/network/if-up.d
scripts sont exécutés pour chaque interface. Pour éviter la duplication des règles, ajoutez simplement:en haut de votre script. Cela entraînera la fermeture immédiate du script si l'interface n'est pas celle souhaitée.
la source
Supprimez la ligne vide avant la
post-up
commande. Cela ne doit concerner que lapost-up
commandeeth0
. Déplacez également votre script hors duif-up.d
dossier. Les scripts de ce dossier sont exécutés automatiquement, peu importe s'ils sont définis commepost-up
. Dans votre cas, il s'exécutera en plus de votrepost-up
commande.la source