Come eseguire uno script, a seconda della connessione a Internet


48

Spesso monto un'unità remota usando sshfs. Mi piacerebbe avere questo supporto automaticamente. Tuttavia, se lo installo nei miei script .bashrc o di avvio, il montaggio spesso non riesce perché la mia connessione Internet wireless non è stata ancora stabilita.

Qualcuno conosce un modo semplice per eseguire uno script bash ogni volta che viene stabilita la connessione o per montare automaticamente un'unità sshfs?

Risposte:


56

Aggiungi il tuo script a /etc/network/if-up.d/. Assegna un nome al tuo script senza estensione ".sh".

Anche dopo aver aggiunto l'esecuzione dello script chmod +x /etc/network/if-up.d/yourscriptnameper fornire le autorizzazioni necessarie.

Assicurati che nel file sia menzionata l'interfaccia di rete (ad es. Wlan0 o eth0) che dovrebbe attivare lo script all'accensione /etc/network/interfaces.


12
all'interno degli script in /etc/network/*.d/è possibile utilizzare la variabile $IFACEper sapere quale interfaccia sta ricevendo una connessione in modo da poter saltare la procedura, ad esempio se è la connessione cablata.
Carlos Campderrós,

C'è un modo per specificare per quale rete specifica vuoi fare questo? quando è la mia rete domestica voglio fare lo script, ma quando sono in giro non potrei voler ...
Joshua Robison,

3
questo in realtà non sembra funzionare affatto. So che i miei script funzionano perché posso eseguirli utilizzando ./ nel terminale e funzionano, ma quando si attiva e disattiva la connessione, gli script non vengono chiamati affatto. C'è qualcosa che devo fare per fare riferimento in qualche modo? rilasciare una sceneggiatura in if-up.d sembra mancare di un passo?!?!
Joshua Robison,

1
controlla se hanno i permessi corretti per favore.
dedunumax,

2
Si prega di aggiungere ciò che dovrebbe essere esattamente interfacesquando non è lì. È auto wlan0e iface wlan0 inet dhcpo altro?
Cookie

25

Nota del redattore: Cuttlefish non è stato aggiornato dal 2012 e non si trova negli attuali repository Ubuntu

Ubuntu 12.04

  • Installa Seppie : uno strumento semplice che realizza i riflessi sul tuo computer eseguendo azioni quando vengono attivati ​​eventi specifici.
  • Apri Seppie e fai clic su New.

    Passo 1

    • Dagli un nome e cambia l' opzione Attivato dallo stimolo su ON.
    • Fare clic su Stimulus , selezionare la categoria Rete e digitare Connetti a WLAN . Clicca OK.

    Passo 2

    • È anche possibile selezionare l'SSID della rete wireless e si ha la possibilità di verificare o meno all'avvio.

    Passaggio 3

    • Ora dovrai specificare una reazione. Vai alla scheda Reazione e fai clic su Aggiungi. Seleziona Applicazioni dalla categoria e Avvia applicazione (in modalità avanzata) dal tipo.

    Passaggio 4

    • Ora specifica lo script che vuoi eseguire nell'opzione eseguibile. Puoi persino passare parametri allo script.

    Step-5

    • E questo è tutto! Assicurati anche di aggiungere Cuttlefish nelle applicazioni di avvio. Vai a Modifica> Preferenze e abilita l'opzione di avvio automatico.

    Step-6


6
la seppia è completamente rotta e non ha visto un aggiornamento per qualche tempo. Vorrei che potesse ottenere più sviluppo perché abbiamo bisogno di qualcosa come l'app Tasker di Android per Linux. Nessuno vuole fare confusione con etc / network / interfacce e cartelle e script if-up. Dammi solo qualcosa su cui posso fare clic o attivare e disattivare.
Joshua Robison,

2

Risponderò a questa parte della domanda OP: "Mi piacerebbe avere questa montatura automaticamente"

Il mio strumento preferito per la condivisione automatica delle condivisioni di rete è autofs: https://help.ubuntu.com/community/Autofs

AutoFS è il mio strumento preferito per montare il mio NAS - per tutti i miei laptop e workstation.

" autofs è un programma per il montaggio automatico delle directory in base alle necessità. I ​​montaggi automatici vengono montati solo quando sono accessibili e vengono smontati dopo un periodo di inattività. Per questo motivo, le condivisioni NFS / Samba con montaggio automatico preservano la larghezza di banda e offrono una migliore larghezza prestazioni complessive rispetto ai supporti statici tramite fstab. "


La tua risposta, se possibile, potrebbe essere un po 'in ritardo poiché l'OP ha già accettato l'altra risposta. Il tuo aiuto è ovviamente apprezzato, tuttavia potresti essere meglio servito concentrando i tuoi sforzi sulle domande senza risposta
Wayne_Yux,

Siamo spiacenti Wayne, RBell ha avuto l'ultima risata qui - la migliore risposta (sull'uso di Seppie) non è più pertinente perché quel pacchetto è obsoleto - ma autofs esiste ancora, e non l'avevo visto se non per questo post. Grazie, RBell!
KlaymenDK

1

Il modo migliore, semplice e facile sarebbe quello di aggiungere un comando up a qualsiasi interfaccia su cui vuoi lavorare.

Le interfacce si trovano nella directory "/ etc / network /" sotto il nome del file "interfacce"

iface elan0 inet manual
    up filename.sh

Questo aggiungerà il comando su a elan0. Assegna in modo simile a qualsiasi interfaccia su cui vuoi lavorare. Ricorda di rientrare di una scheda.

Assicurati di dare le autorizzazioni di esecuzione al file.

sudo chmod 755 filename.sh

1
Fantastico! Funziona con tun0interfacce VPN gestite da network-manager. La chiave è l'uso di inet manual.
KrisWebDev,

1

Per quanto mi riguarda, la /etc/network/if-up.d/soluzione non ha funzionato da me come quando ho aggiunto /etc/network/interfacesquanto segue:

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

La connessione Wifi inizierà dopo il riavvio.

Ma dopo alcune difficoltà, da questo link , ciò che ha funzionato è stato aggiungere lo script /etc/NetworkManager/dispatcher.d/nella forma in 90myscript.shcui si 90trova il livello di priorità della sceneggiatura e con la seguente forma:

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

Immagino che ci siano problemi tra chi controlla la configurazione della rete a livello di sistema e talvolta il networkcomportamento predefinito viene lasciato indietro a quello del dispatcher.

Inoltre, per coloro che vorrebbero - come me - provare ad avere un collegamento simbolico allo script (per archiviare il file in una posizione migliore), purtroppo non ha funzionato per me.

Spero che sia di aiuto!


1

systemd sembra aver assunto il controllo della rete al giorno d'oggi.

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

Ha anche unità corrispondenti alle interfacce

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

Apparentemente puoi usarli nei file delle unità di servizio. Quindi basta creare un'unità di servizio per eseguire lo script e utilizzare qualcosa di simile all'interno per farlo funzionare in modo condizionale sulla rete:

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

In bocca al lupo! Non l'ho provato, quindi "il tuo chilometraggio può variare".

fonti:

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.