Come eseguire uno script, in base alla connessione Internet

44

Spesso monto un'unità remota usando sshfs. Mi piacerebbe avere questa montatura automaticamente. Tuttavia, se lo monto nel mio .bashrc o script di avvio, il mount spesso fallisce perché la mia connessione internet wireless non è ancora stata effettuata.

Qualcuno sa di un modo semplice per eseguire uno script di bash ogni volta che viene effettuata la connessione, o per montare automaticamente un'unità sshfs?

    
posta jmite 20.02.2013 - 04:48

6 risposte

50

Aggiungi lo script a /etc/network/if-up.d/ . Assegna un nome allo script senza estensione ".sh".

Anche dopo aver aggiunto lo script esegui chmod +x /etc/network/if-up.d/yourscriptname per dare il permesso necessario.

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

    
risposta data dedunumax 20.02.2013 - 05:00
25

Nota del redattore: Seppie non è stata aggiornata dal 2012 e non si trova in nessun repository di Ubuntu corrente

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

    • Assegnagli un nome e modifica l'opzione Attivato da stimolo su ON.
    • Fai clic su Stimolo , seleziona la categoria Rete e digita Connetti a WLAN . Fai clic su OK.

    • Puoi anche selezionare il SSID della rete wireless e hai la possibilità di controllarlo all'avvio o meno.

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

    • Ora specifica lo script che vuoi eseguire in opzione eseguibile. Puoi anche passare i parametri allo script.

    • E questo è tutto! Assicurati inoltre di aggiungere Cuttlefish nelle applicazioni di avvio. Vai a Modifica & gt; Preferenze e attiva l'opzione di avvio automatico.

risposta data ignite 20.02.2013 - 05:19
1

Il modo migliore, semplice e facile sarebbe aggiungere un comando up all'interfaccia di sempre su cui si desidera 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 up a elan0. Dare questo in modo simile all'interfaccia che vuoi lavorare. Ricorda di indentare un tab spazio.

Assicurati di fornire le autorizzazioni di esecuzione al file.

sudo chmod 755 filename.sh
    
risposta data Revanth Kumar 11.03.2015 - 07:35
1

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

Il mio strumento preferito per automounting le condivisioni di rete è autofs: link

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, automounting NFS / Samba le condivisioni conservano la larghezza di banda e offrono migliori prestazioni globali rispetto alle montature statiche via fstab. "

    
risposta data RBell 24.06.2016 - 09:10
0

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

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

La connessione Wifi inizierà dopo il riavvio.

Ma dopo qualche lotta, da questo link , ciò che ha funzionato è stato per aggiungere lo script a /etc/NetworkManager/dispatcher.d/ nel formato 90myscript.sh dove 90 è il livello di priorità dello script e con il seguente modulo:

#!/bin/bash

IF=
STATUS=

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

Suppongo che ci siano problemi tra chi controlla la configurazione di rete a livello di sistema e talvolta il comportamento predefinito di network è lasciato dietro 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 questo aiuti!

    
risposta data Augustin Riedinger 28.02.2018 - 13:07
0

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)

A quanto pare è possibile utilizzarli in file di unità di servizio. Quindi, crea semplicemente un'unità di servizio per eseguire il tuo script e usa qualcosa di simile all'interno per farlo funzionare in modo condizionato sulla rete:

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

Buona fortuna! Non ho provato questo, quindi "il tuo chilometraggio può variare".

Fonti:

risposta data Rolf 30.03.2018 - 14:39

Leggi altre domande sui tag