Hier ist der Inhalt von /etc/network/interfaces
:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
post-up /etc/network/if-up.d/sshstart
Und sshstart
ist ein Skript mit folgendem Inhalt:
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
Wenn der Computer neu gestartet wird, wird der curl
Befehl mehrmals ausgeführt, die Datei landet zwei- oder dreimal auf dem FTP-Server, und wenn ich mir die Prozesse ansehe, scheint es, als würden mehrere Instanzen von Autossh ausgeführt ... Ich bin mir nicht sicher, ob dies der Fall ist autossh macht Dinge oder nicht, aber Curl sollte die Datei auf keinen Fall mehrmals hochladen.
Meine Vermutung ist, dass das gesamte sshstart
Skript mehrmals ausgeführt wird, aber ich verstehe nicht warum.
Ich habe versucht, beim Booten nach Details zum Netzwerk-Setup-Prozess zu suchen, konnte jedoch nur Syntaxinformationen für die Schnittstellendatei finden.
Kann mir bitte jemand helfen?
Vielen Dank.
--- Bearbeiten ---
Wie unten vorgeschlagen, habe ich meine Schnittstellendatei wie folgt geändert (die leeren Zeilen über dem Post-Up entfernt):
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
post-up /etc/network/if-up.d/sshstart
Und fügte die folgende Zeile zu sshstart hinzu:
echo $(date)>>/run/shm/sshstart.log
Hier ist der Inhalt von /run/shm/sshstart.log
nach einem Neustart:
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
Es wurde also 4 Mal ausgeführt :( Was ist los?
echo $(date)
ist etwas umständlich und indirekt. Könnte auch so buchstabieren wiedate
. Ähnlich wie bei der nutzlosen Verwendung des Cat Award .Antworten:
Dateien werden
/etc/network/if-up.d
bereits automatisch ausgeführt, wenn eine Schnittstelle (eine beliebige Schnittstelle) aufgerufen wird. Wenn Sie dasselbe Skript angeben, das in einem explizitenpost-up
Befehl erneut ausgeführt werden soll, wird das Skript nur erneut ausgeführt. Ich vermute also, dass dies passieren sollte:lo
angezeigt wird (mit UmgebungsvariableIFACE=lo
), da es sich in befindet/etc/network/if-up.d
.eth0
es (mit UmgebungsvariablenIFACE=eth0
) angezeigt wird.eth0
angezeigt wird (mit nicht festgelegter UmgebungsvariableIFACE
), da Sie dies in einerpost-up
Direktive angefordert haben.Ich bin mir nicht sicher, woher das vierte Mal kommt, aber das sind sowieso schon drei.
Sie müssen das Skript entweder an einer anderen Stelle suchen und einmal mit einer
post-up
Direktive ausführen oder es dort belassen, wo es sich befindet. Erwähnen Sie es jedoch nicht in einerpost-up
Direktive und überprüfen Sie den Wert von,$IFACE
damit es nichts tut, es sei denn, die gewünschte Schnittstelle (eth0
) ist gekommen oben.quelle
--all
. Es hört sich so an, als ob es eine Funktion gibt, mit der dieif-up.d
Skripte ein letztes Mal mit diesem Argument ausgeführt werden können, um zu signalisieren, dass alle Schnittstellen jetzt aktiv sind, falls ein Skript eine Aktion ausführen möchte, sobald bekannt wird, dass keine weiteren Schnittstellen anstehen. Das erklärt das vierte Mal.Wie von Celada angegeben, werden
/etc/network/if-up.d
Skripte für jede Schnittstelle ausgeführt. Um Regelüberschneidungen zu vermeiden, fügen Sie einfach Folgendes hinzu:oben in Ihrem Skript. Dadurch wird das Skript sofort beendet, wenn die Schnittstelle nicht die gewünschte ist.
quelle
Löschen Sie die leere Zeile vor dem
post-up
Befehl. Dies sollte denpost-up
Befehleth0
nur beziehen . Verschieben Sie Ihr Skript zusätzlich aus demif-up.d
Ordner. Skripte in diesem Ordner werden automatisch ausgeführt, unabhängig davon, ob sie als definiert sindpost-up
. In Ihrem Fall wird es zusätzlich zu Ihrempost-up
Befehl ausgeführt.quelle