Ich verwende Debian 7 Wheezy und muss beim Start einige Bildschirme starten, sobald eine voll funktionsfähige Internetverbindung besteht. Allerdings nicht, wenn die Internetverbindung unterbrochen und wieder hergestellt wurde. Also erst bei der ersten funktionierenden Internetverbindung nach dem Booten.
Könnten Sie bitte ein Dummy-Skript dazu posten und mir mitteilen, wo es abgelegt und unter den gegebenen Bedingungen ausgeführt werden soll?
Das Skript muss nur den Bildschirm starten und dann beenden, der Bildschirm sollte jedoch fortgesetzt werden.
BEARBEITEN
Ich habe schon von dem /etc/network/if-up.d/
Ordner gehört. Aber wie kann ich sicherstellen, dass das Skript nicht erneut ausgeführt wird, wenn die Internetverbindung unterbrochen und dann wieder hergestellt wird?
quelle
Antworten:
Fügen Sie Ihr Skript ein
/etc/network/if-up.d
und machen Sie es ausführbar. Es wird bei jedem Aufrufen einer Netzwerkschnittstelle automatisch ausgeführt.Damit es nur beim ersten Start funktioniert, müssen Sie prüfen, ob eine Flag-Datei vorhanden ist, die Sie nach dem ersten Start erstellt haben. Beispiel:
quelle
/var/run
gibt es ein flüchtiges Dateisystem (atmpfs
). So bleibt es bei jedem neuen Schuh garantiert leer.python -c 'import os; os.open("/var/run/work-was-already-done", os.O_EXCL|os.O_CREAT, 0)' 2>/dev/null || exit 0
IFACE
keinelo
oder eine virtuelle Schnittstelle ist. Testen Sie die Internetverbindung, indem Sie einen Ping-Befehl senden.$IFACE
kann als Werte jede Schnittstelle haben, die auftaucht. Sie können alle Schnittstellen auflisten, die vorhanden sind,ip link
oder überprüfen, welche für das Scannen konfiguriert sind/etc/network/interfaces
Dies ist ein Job, für den er sehr gut geeignet ist
systemd
.Ausführen eines Skripts als systemd-Dienst
Wenn auf Ihrem System systemd ausgeführt wird , können Sie Ihr Skript so konfigurieren, dass es als systemd-Dienst ausgeführt wird, der die Kontrolle über die Lebenszyklus- und Ausführungsumgebung sowie die Voraussetzungen für den Start des Skripts bietet, z. B., dass das Netzwerk aktiv ist.
Der empfohlene Ordner für Ihre eigenen Dienste ist
/etc/systemd/system/
(eine andere Option ist/lib/systemd/system
jedoch, dass diese normalerweise nur für OOTB-Dienste verwendet werden sollte).Erstellen Sie die Datei zB mit
sudo vim /etc/systemd/system/autossh.service
:Jetzt können Sie den Service testen:
Überprüfen des Status des Dienstes:
Beenden des Dienstes:
Sobald Sie überprüft haben, dass der Dienst wie erwartet funktioniert, aktivieren Sie ihn mit:
quelle
Die Internetverbindung wird durch einen Eintrag in
/etc/rc6.d/
vermutlich hergestelltS35networking
. Wenn Sie diese Datei ändern und Ihre Befehle am Ende einfügen oder besser a/etc/init.d/mystuff
und einen Link hinzufügen und/etc/rc0.d/S36mystuff
Ihre Befehle dort einfügen, wird dies gestartet, sobald das Netzwerk aktiv ist.quelle
/etc/network/if-up.d
/etc/rc0.d
beim Start kein Skript ausgeführt wird. Diese werden beim Herunterfahren ausgeführt (Run Level 0). Beim Start wäre es etwas in/etc/rc2.d
oder ähnlich. Speziell für das Debian-Keuchen des OP ist es/etc/rcS.d/S12networking
. Das alles verlinkt natürlich auf dieselbe Datei. Auch BTW @Anthon danke für die Behebung meiner Antwort: "Bitte" statt "Put"? Was für ein seltsamer Tippfehler!if-up.d
als generischer Mechanismus auch bei einer erneuten Verbindung funktioniert.