Perché i comandi di post-up in / etc / network / interfaces vengono eseguiti più volte all'avvio?


10

Ecco il contenuto di /etc/network/interfaces:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

post-up /etc/network/if-up.d/sshstart

Ed sshstartè uno script con al suo interno:

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 username@17.16.15.2 -p 8080

Quando la macchina si riavvia, il curlcomando viene eseguito più volte, il file finisce 2 o 3 volte sul server ftp e quando guardo i processi sembra che ci siano più istanze di autossh in esecuzione ... Non sono sicuro se questo è come autossh fa le cose o no, ma sicuramente curl non dovrebbe caricare il file più volte.

La mia impressione è che l'intero sshstartscript venga eseguito più volte ma non capisco perché.

Ho provato a cercare i dettagli sul processo di configurazione della rete all'avvio, ma tutto quello che ho potuto trovare erano le informazioni sulla sintassi per il file delle interfacce.

Qualcuno può aiutare per favore?

Grazie.

--- Modifica ---

Come suggerito sotto ho modificato il mio file interfacce come segue (rimosso le righe vuote sopra il post-up):

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
post-up /etc/network/if-up.d/sshstart

E ha aggiunto la seguente riga a sshstart:

echo $(date)>>/run/shm/sshstart.log

Ecco il contenuto di /run/shm/sshstart.logdopo un riavvio:

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

Quindi è stato eseguito 4 volte :( cosa sta succedendo?


1
Suggerimento: lo imposta if-up.d su true e anche eth0 lo imposta su true. Il post-up viene eseguito dopo aver impostato ognuno di essi. Lo script deve dipendere dal fatto che sia attiva solo 1 interfaccia, non entrambe.
eyoung100,

Ho pensato che potesse essere qualcosa del genere, indovina un po 'di tempo per RTFM.
TCZ8,

Ho controllato e non riesco a trovare come specificare quale adattatore per il comando post-up, sembra avere qualcosa a che fare con una "stanza" ma non capisco esattamente. la pagina delle interfacce di Debian e Ubuntu ha molte informazioni ma ha saltato quella parte.
TCZ8,

1
Non correlato alla domanda, ma BTW echo $(date)è un po 'imbarazzante e indiretto. Potrebbe anche solo dirlo date. Simile a Useless Use of Cat Award .
Celada,

Hahaha! hai assolutamente ragione! Non ho idea del perché l'ho fatto: P
TCZ8

Risposte:


13

I file vengono /etc/network/if-up.d già eseguiti automaticamente ogni volta che viene visualizzata un'interfaccia (qualsiasi interfaccia). Quando si specifica di eseguire nuovamente lo stesso script in un post-upcomando esplicito , si esegue di nuovo solo lo script. Quindi la mia ipotesi è che questo è ciò che dovrebbe accadere:

  • Viene eseguito una volta quando losi presenta (con variabile di ambiente IFACE=lo) a causa della sua posizione in /etc/network/if-up.d.
  • Funziona una volta quando eth0compare (con variabile d'ambiente IFACE=eth0) per lo stesso motivo.
  • Viene eseguito nuovamente quando eth0viene visualizzato (con la variabile di ambiente IFACEnon impostata) perché è stato richiesto in una post-updirettiva.

Non sono sicuro da dove provenga la quarta volta, ma comunque sono già tre.

È necessario individuare lo script da qualche altra parte ed eseguirlo una volta utilizzando una post-updirettiva, oppure lasciarlo dove si trova ma non menzionarlo in una post-updirettiva e controllare il valore in $IFACEmodo che non faccia nulla a meno che l'interfaccia desiderata ( eth0) non sia arrivata su.


UOMO! Finalmente! hai assolutamente ragione, ho appena aggiunto una riga a sshstart per riecheggiare $ IFACE nel mio file di log ed è esattamente come l'hai descritto tu! La prima volta è lo, la seconda volta è eth0, la terza è di nuovo eth0 (forma il post-up) e la quarta volta non è così chiara .. Il valore di $ IFACE alla quarta volta è: --tutto Non sapresti cosa si intende? Solo per curiosità :)
TCZ8,

1
Non lo sapevo --all. Sembra che ci sia una funzione per eseguire gli if-up.dscript un'ultima volta con questo argomento per segnalare che tutte le interfacce sono ora attive, nel caso in cui alcuni script vogliano intraprendere un'azione una volta scoperto che non sono in sospeso ulteriori interfacce. Questo spiega la quarta volta.
Celada,

Questo ha senso, grazie per tutto il tuo aiuto!
TCZ8,

3

Come affermato da Celada, gli /etc/network/if-up.dscript vengono eseguiti per ogni interfaccia. Per evitare la duplicazione delle regole è sufficiente aggiungere:

[ "$IFACE" = "eth0" ] || exit 0

nella parte superiore della tua sceneggiatura. Ciò causerà la chiusura immediata dello script se l'interfaccia non è quella desiderata.


1

Elimina la riga vuota prima del post-upcomando. Questo dovrebbe riguardare solo il post-upcomando eth0. Inoltre sposta lo script fuori dalla if-up.dcartella. Gli script in quella cartella vengono eseguiti automaticamente, non importa se definiti come post-up. Nel tuo caso verrà eseguito in aggiunta al tuo post-upcomando.


Non funziona, vedi la modifica nella mia domanda.
TCZ8
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.