Wie ein Skript ausgeführt wird, hängt von der Internetverbindung ab

48

Ich mounte oft ein Remote-Laufwerk mit sshfs. Ich würde dieses Reittier gerne automatisch haben. Wenn ich es jedoch in meinen .bashrc- oder Startskripten einbinde, schlägt die Einbindung häufig fehl, da meine drahtlose Internetverbindung noch nicht hergestellt wurde.

Kennt jemand eine einfache Möglichkeit, einen Bash-Scrip bei jedem Verbindungsaufbau auszuführen oder ein sshfs-Laufwerk automatisch zu mounten?

jmite
quelle

Antworten:

56

Fügen Sie Ihr Skript zu hinzu /etc/network/if-up.d/. Nennen Sie Ihr Skript ohne die Erweiterung ".sh".

Auch nach dem Hinzufügen von Skript ausführen chmod +x /etc/network/if-up.d/yourscriptname, um die erforderliche Berechtigung zu erteilen.

Stellen Sie sicher, dass die Netzwerkschnittstelle (z. B. wlan0 oder eth0), die Ihr Skript beim Einschalten auslösen soll, in der Datei angegeben ist /etc/network/interfaces.

dedunumax
quelle
12
Innerhalb von Skripten in können /etc/network/*.d/Sie anhand der Variablen feststellen $IFACE, welche Schnittstelle eine Verbindung erhält, sodass Sie die Prozedur überspringen können, wenn es sich beispielsweise um eine Kabelverbindung handelt.
Carlos Campderrós
Gibt es eine Möglichkeit, anzugeben, für welches bestimmte Netzwerk Sie dies tun möchten? Wenn es mein Heimnetzwerk ist, möchte ich das Skript ausführen, aber wenn ich ein Netzwerk für unterwegs habe, möchte ich möglicherweise nicht ...
Joshua Robison
3
das scheint eigentlich gar nicht zu funktionieren. Ich weiß, dass meine Skripte funktionieren, weil ich sie mit ./ im Terminal ausführen kann und sie funktionieren, aber wenn ich die Verbindung ein- und ausschalte, werden die Skripte überhaupt nicht aufgerufen. Muss ich irgendetwas tun, um sie in irgendeiner Weise zu referenzieren? Wenn Sie ein Skript in if-up.d ablegen, fehlt anscheinend ein Schritt?!?!
Joshua Robison
1
Überprüfen Sie, ob sie die richtigen Berechtigungen haben.
Dedunumax
2
Bitte fügen Sie hinzu, was genau passiert, interfaceswenn es nicht da ist. Ist es auto wlan0und iface wlan0 inet dhcpoder etwas anderes?
Cookie
25

Anmerkung der Redaktion: Cuttlefish wurde seit 2012 nicht mehr aktualisiert und befindet sich in keinem aktuellen Ubuntu-Repository

Ubuntu 12.04

  • Cuttlefish installieren : Ein einfaches Tool, mit dem Sie Reflexe auf Ihrem Computer erkennen, indem Sie Aktionen ausführen, wenn bestimmte Ereignisse ausgelöst werden.
  • Öffnen Sie Tintenfisch und klicken Sie auf New.

    Schritt 1

    • Geben Sie einen Namen und ändern Sie die Option Aktiviert durch Stimulus in EIN.
    • Klicken Sie auf Stimulus , wählen Sie die Kategorie Netzwerk und geben Sie Connect to WLAN ein . OK klicken.

    Schritt 2

    • Sie können auch die SSID des drahtlosen Netzwerks auswählen und wählen, ob dies beim Start überprüft werden soll oder nicht.

    Schritt 3

    • Nun müssen Sie eine Reaktion angeben. Gehen Sie zur Registerkarte Reaktion und klicken Sie auf Hinzufügen. Wählen Sie Anwendungen aus der Kategorie und Anwendung starten (im erweiterten Modus) vom Typ.

    Schritt 4

    • Geben Sie nun das Skript an, das Sie mit der ausführbaren Option ausführen möchten. Sie können sogar Parameter an das Skript übergeben.

    Schritt-5

    • Und das ist es! Stellen Sie außerdem sicher, dass Sie Cuttlefish in Startanwendungen hinzufügen. Gehen Sie zu Bearbeiten> Einstellungen und aktivieren Sie die Autostart-Option.

    Schritt-6

entzünden
quelle
6
Tintenfisch ist völlig kaputt und hat seit einiger Zeit kein Update mehr gesehen. Ich wünschte, es könnte weiterentwickelt werden, denn wir brauchen so etwas wie die Tasker-App für Android für Linux. Niemand möchte sich mit etc / network / interfaces und if-up-Ordnern und Skripten anlegen. Geben Sie mir einfach etwas, auf das ich klicken oder das ich ein- und ausschalten kann.
Joshua Robison
2

Ich werde diesen Teil der OP-Frage beantworten: "Ich würde dieses Reittier gerne automatisch haben."

Mein Lieblingswerkzeug für die automatische Bereitstellung von Netzwerkfreigaben ist autofs: https://help.ubuntu.com/community/Autofs

AutoFS ist das Werkzeug meiner Wahl, um mein NAS zu mounten - für alle meine Laptops und Workstations.

" autofs ist ein Programm zum automatischen Mounten von Verzeichnissen nach Bedarf. Auto-Mounts werden nur beim Zugriff gemountet und nach einer gewissen Zeit der Inaktivität wieder entfernt. Aus diesem Grund wird durch das automatische Mounten von NFS / Samba-Freigaben Bandbreite gespart und eine bessere Leistung erzielt Gesamtleistung im Vergleich zu statischen Reitern über fstab. "

RBell
quelle
Möglicherweise kommt Ihre Antwort etwas zu spät, da das OP die andere Antwort bereits akzeptiert hat. Ihre Hilfe wird natürlich geschätzt, aber Sie könnten besser bedient werden, indem Sie Ihre Bemühungen auf die unbeantworteten Fragen konzentrieren
Wayne_Yux
Entschuldigung Wayne, RBell hat das letzte Lachen hier - die beste Antwort (über die Verwendung von Tintenfisch) ist nicht mehr relevant, da dieses Paket veraltet ist - aber autofs gibt es immer noch, und ich hatte es nicht gesehen, wenn nicht für diesen Beitrag. Danke, RBell!
KlaymenDK
1

Der beste, einfachste und einfachste Weg wäre, ein up-Kommando zu jeder Schnittstelle hinzuzufügen, an der Sie arbeiten möchten.

Schnittstellen finden Sie im Verzeichnis "/ etc / network /" unter dem Dateinamen "interfaces"

iface elan0 inet manual
    up filename.sh

Dies fügt den Befehl up zu elan0 hinzu. Geben Sie dies gleichzeitig an die Schnittstelle, an der Sie arbeiten möchten. Denken Sie daran, einen Tabulatorplatz einzurücken.

Stellen Sie sicher, dass Sie die Ausführungsberechtigungen für die Datei erteilen.

sudo chmod 755 filename.sh
Revanth Kumar
quelle
1
Fantastisch! Funktioniert mit tun0VPN-Schnittstellen, die von verwaltet werden network-manager. Der Schlüssel ist die Verwendung von inet manual.
KrisWebDev
1

Für mich hat die /etc/network/if-up.d/Lösung nicht funktioniert, als ich /etc/network/interfacesFolgendes hinzufügte :

auto wlp58s0
iface wlp58s0 inet dhcp
post-up /home/augustin/Config/myscript.sh

Wifi würde nach dem Neustart starten.

Nach einigem Hin und Her funktionierte es jedoch, das Skript /etc/NetworkManager/dispatcher.d/in der Form hinzuzufügen90myscript.sh , wo 90die Prioritätsstufe des Skripts und mit der folgenden Form:

#!/bin/bash

IF=$1
STATUS=$2

if [ "$IF" == "wlp58s0" ]
then
    case "$2" in
        up)
        # interface is up
        ;;
        down)
        # interface will be down
        ;;
        pre-up)
        # interface will be up
        ;;
        post-down)
        # interface is down
        ;;
        *)
        ;;
    esac
fi

Ich denke, es gibt Probleme zwischen der Steuerung der Netzwerkkonfiguration auf Systemebene und manchmal networkbleibt das Standardverhalten hinter dem des Dispatchers zurück.

Auch für diejenigen, die - wie ich - versuchen möchten, einen symbolischen Link zum Skript zu haben (um die Datei an einem besseren Ort zu speichern), hat es leider bei mir nicht funktioniert.

Hoffe das hilft!

Augustin Riedinger
quelle
1

systemd scheint heutzutage die Vernetzung übernommen zu haben.

$ networkctl
WARNING: systemd-networkd is not running, output will be incomplete.

IDX LINK             TYPE               OPERATIONAL SETUP
  1 lo               loopback           n/a         unmanaged
  2 enp0s25          ether              n/a         unmanaged
  3 wlo1             wlan               n/a         unmanaged

3 links listed.

Es hat auch Einheiten, die den Schnittstellen entsprechen

$ systemctl list-units |grep wlo1
sys-devices-pci0000:00-0000:00:1c.3-0000:24:00.0-net-wlo1.device                                                        loaded active plugged   Centrino Ultimate-N 6300 (3x3 AGN)
sys-subsystem-net-devices-wlo1.device                                                                                   loaded active plugged   Centrino Ultimate-N 6300 (3x3 AGN)

Anscheinend können Sie diese in Service-Unit-Dateien verwenden. Erstellen Sie also einfach eine Service-Unit, um Ihr Skript auszuführen, und verwenden Sie so etwas wie diese, um es im Netzwerk unter bestimmten Bedingungen auszuführen:

BindsTo=sys-subsystem-net-devices-wlo1.device
After=sys-subsystem-net-devices-wlo1.device

Viel Glück! Ich habe dies nicht getestet, "Ihre Laufleistung kann variieren".

Quellen:

Rolf
quelle