Jak uruchomić skrypt, w zależności od połączenia z Internetem


48

Często montuję dysk zdalny za pomocą sshfs. Chciałbym mieć tego wierzchowca automatycznie. Jeśli jednak podłączę go w skrypcie .bashrc lub w skryptach startowych, podłączenie często kończy się niepowodzeniem, ponieważ moje bezprzewodowe połączenie internetowe nie zostało jeszcze utworzone.

Czy ktoś wie o łatwym sposobie wykonywania skryptu bash za każdym razem, gdy jest nawiązywane połączenie, lub do automatycznego montowania napędu sshfs?

Odpowiedzi:


56

Dodaj swój skrypt do /etc/network/if-up.d/. Nazwij swój skrypt bez rozszerzenia „.sh”.

Również po dodaniu skryptu uruchom chmod +x /etc/network/if-up.d/yourscriptnameodpowiednie uprawnienia.

Upewnij się, że w pliku wspomniany jest interfejs sieciowy (np. Wlan0 lub eth0), który powinien uruchamiać skrypt po włączeniu /etc/network/interfaces.


12
wewnątrz skryptów /etc/network/*.d/możesz użyć zmiennej, $IFACEaby wiedzieć, który interfejs uzyskuje połączenie, więc możesz pominąć procedurę, jeśli jest to na przykład połączenie przewodowe.
Carlos Campderrós

Czy istnieje sposób określenia, dla której konkretnej sieci chcesz to zrobić? gdy jest to moja sieć domowa, chcę wykonać skrypt, ale kiedy jestem poza siecią, mogę nie chcieć ...
Joshua Robison

3
to wydaje się wcale nie działać. Wiem, że moje skrypty działają, ponieważ mogę je uruchamiać za pomocą ./ w terminalu i działają, ale kiedy wyłączam i łączę się, skrypty w ogóle nie są wywoływane. Czy jest coś, co muszę zrobić, aby się do nich odwołać? upuszczenie skryptu w if-up.d wydaje się brakować kroku?!?!
Joshua Robison

1
sprawdź, czy mają poprawne uprawnienia.
dedunumax

2
Dodaj, co dokładnie powinno się pojawić, interfacesgdy go nie ma. Czy to auto wlan0i iface wlan0 inet dhcpczy coś jeszcze?
Cookie

25

Uwaga edytora: Mątwy nie aktualizowano od 2012 roku i nie ma jej w żadnych aktualnych repozytoriach Ubuntu

Ubuntu 12.04

  • Zainstaluj Mątwy : Proste narzędzie, które realizuje refleks na twoim komputerze, wykonując działania po wyzwoleniu określonych zdarzeń.
  • Otwórz Mątwy i kliknij New.

    Krok 1

    • Nadaj mu nazwę i zmień opcję Aktywowane przez bodziec na WŁ.
    • Kliknij na Stimulus , wybierz kategorię Sieć i wpisz Połącz z WLAN . Kliknij OK.

    Krok 2

    • Możesz również wybrać identyfikator SSID sieci bezprzewodowej i masz możliwość sprawdzenia tego przy uruchomieniu.

    Krok 3

    • Teraz musisz określić reakcję. Przejdź do zakładki Reakcja i kliknij dodaj. Wybierz Aplikacje z kategorii i Uruchom aplikację (w trybie zaawansowanym) z typu.

    Krok 4

    • Teraz określ skrypt, który chcesz uruchomić, w opcji wykonywalnej. Możesz nawet przekazać parametry do skryptu.

    Krok 5

    • I to wszystko! Upewnij się także, że dodajesz Mątwy w aplikacjach startowych. Przejdź do Edycja> Preferencje i włącz opcję autostartu.

    Krok 6


6
mątwa jest całkowicie zepsuta i od jakiegoś czasu nie widziała aktualizacji. Chciałbym, żeby mógł się bardziej rozwinąć, ponieważ potrzebujemy czegoś takiego jak Android Tasker dla systemu Linux. Nikt nie chce zadzierać z etc / network / interfaces oraz folderami i skryptami if-up. Po prostu daj mi coś, co mogę kliknąć lub włączyć lub wyłączyć.
Joshua Robison

2

Odpowiem na tę część pytania PO: „Chciałbym mieć tego wierzchowca automatycznie”

Moje ulubione narzędzie do automatycznego montowania udziałów sieciowych to autofs: https://help.ubuntu.com/community/Autofs

AutoFS to moje wybrane narzędzie do montowania mojego serwera NAS - dla wszystkich moich laptopów i stacji roboczych.

autofs to program do automatycznego montowania katalogów zgodnie z potrzebami. Automatyczne montowanie jest montowane tylko wtedy, gdy są dostępne, i są odmontowane po pewnym okresie bezczynności. Z tego powodu automatyczne montowanie udziałów NFS / Samba oszczędza przepustowość i oferuje lepsze ogólna wydajność w porównaniu do statycznych montowań przez fstab.


Twoja odpowiedź, o ile to możliwe, może być nieco spóźniona, ponieważ PO już zaakceptował inną odpowiedź. Twoja pomoc jest oczywiście doceniana, jednak lepiej pomóc ci, koncentrując swoje wysiłki na pytaniach bez odpowiedzi
Wayne_Yux

Niestety, Wayne, RBell ostatnio się śmiał - najlepsza odpowiedź (na temat używania Mątwy) nie jest już aktualna, ponieważ ten pakiet jest nieaktualny - ale autofs wciąż istnieje i nie widziałbym go, gdyby nie ten post. Dzięki, RBell!
KlaymenDK

1

Najlepszym, prostym i łatwym sposobem byłoby dodanie polecenia „up” do dowolnego interfejsu, nad którym chcesz pracować.

Interfejsy można znaleźć w katalogu „/ etc / network /” pod nazwą pliku „interfejsy”

iface elan0 inet manual
    up filename.sh

Spowoduje to dodanie polecenia up do elan0. Podaj to jednocześnie do dowolnego interfejsu, nad którym chcesz pracować. Pamiętaj, aby wciąć jedno miejsce tabulacji.

Upewnij się, że masz uprawnienia do wykonywania pliku.

sudo chmod 755 filename.sh

1
Fantastyczny! Współpracuje z tun0interfejsami VPN zarządzanymi przez network-manager. Kluczem jest użycie inet manual.
KrisWebDev

1

Jeśli o mnie chodzi, /etc/network/if-up.d/rozwiązanie nie działało ode mnie, gdy dodałem do /etc/network/interfacesnastępujących:

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

Wifi uruchomi się po ponownym uruchomieniu.

Ale po niektórych zmaganiach z tego linku działało dodanie skryptu /etc/NetworkManager/dispatcher.d/w formie, w 90myscript.shktórej 90jest poziom priorytetu skryptu, oraz w następującej formie:

#!/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

Wydaje mi się, że istnieją problemy między tym, kto kontroluje konfigurację sieci na poziomie systemu, a czasem domyślne networkzachowanie pozostaje po stronie dyspozytora.

Również dla tych, którzy chcieliby - jak ja - próbować mieć symboliczny link do skryptu (do przechowywania pliku w lepszej lokalizacji), niestety to nie zadziałało.

Mam nadzieję że to pomoże!


1

systemd Wygląda na to, że przejęto obecnie tworzenie sieci.

$ 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.

Ma również jednostki odpowiadające interfejsom

$ 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)

Najwyraźniej można ich użyć w plikach jednostki serwisowej. Więc po prostu stwórz jednostkę usługową, aby uruchomić skrypt i użyj czegoś takiego w środku, aby warunkowo działał w sieci:

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

Powodzenia! Nie testowałem tego, więc „Twój przebieg może się różnić”.

Źródła:

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.