Comment exécuter un script, en fonction de la connexion Internet


48

Je monte souvent un lecteur distant en utilisant sshfs. J'aimerais avoir cette monture automatiquement. Cependant, si je le monte dans mes scripts .bashrc ou de démarrage, le montage échoue souvent car ma connexion Internet sans fil n'a pas encore été établie.

Est-ce que quelqu'un connaît un moyen simple d'exécuter un script bash chaque fois que la connexion est établie ou de monter automatiquement un lecteur sshfs?

Réponses:


57

Ajoutez votre script à /etc/network/if-up.d/. Nommez votre script sans extension '.sh'.

Aussi, après avoir ajouté le script, lancez chmod +x /etc/network/if-up.d/yourscriptnamepour donner les autorisations nécessaires

Assurez-vous que l’interface réseau (par exemple wlan0 ou eth0) devant déclencher votre script à l’activation est mentionnée dans le fichier /etc/network/interfaces.


12
Dans les scripts, /etc/network/*.d/vous pouvez utiliser la variable $IFACEpour savoir quelle interface obtient une connexion et ignorer la procédure s'il s'agit d'une connexion câblée, par exemple.
Carlos Campderrós

Existe-t-il un moyen de spécifier le réseau spécifique pour lequel vous voulez le faire? Quand je suis chez moi, je veux faire le script, mais quand je suis en réseau, je ne veux peut-être pas ...
Joshua Robison

3
cela ne semble pas fonctionner du tout. Je sais que mes scripts fonctionnent parce que je peux les exécuter à l’aide de ./ dans le terminal. Ils fonctionnent, mais lorsque je passe d’une connexion à l’autre, les scripts ne sont pas appelés du tout. Est-ce que je dois faire quelque chose pour les référencer? déposer un script dans if-up.d semble manquer d'un pas?!?!
Joshua Robison

1
vérifiez si elles ont les autorisations correctes s'il vous plaît.
dedunumax

2
S'il vous plaît ajouter ce qui devrait exactement entrer interfacesquand il n'est pas là. Est-ce auto wlan0ou iface wlan0 inet dhcpou quoi d'autre?
Cookie

25

Note de l'éditeur: Cuttlefish n'a pas été mis à jour depuis 2012 et ne se trouve dans aucun référentiel Ubuntu actuel

Ubuntu 12.04

  • Installez Cuttlefish : un outil simple, qui réalise les réflexes sur votre ordinateur en exécutant des actions lorsque des événements spécifiques sont déclenchés.
  • Ouvrez Cuttlefish et cliquez sur New.

    Étape 1

    • Donnez-lui un nom et définissez l' option Activé par stimulus sur ON.
    • Cliquez sur Stimulus , sélectionnez la catégorie Network et tapez Connect to WLAN . Cliquez sur OK.

    Étape 2

    • Vous pouvez également sélectionner le SSID du réseau sans fil et vous avez la possibilité de le vérifier ou non au démarrage.

    Étape 3

    • Maintenant, vous devrez spécifier une réaction. Accédez à l' onglet Réaction , puis cliquez sur Ajouter. Sélectionnez Applications dans la catégorie et Démarrer application (en mode avancé) à partir de.

    Étape 4

    • Maintenant, spécifiez le script que vous voulez exécuter dans l'option exécutable. Vous pouvez même passer des paramètres au script.

    Étape 5

    • Et c'est tout! Assurez-vous également que vous ajoutez Cuttlefish dans les applications de démarrage. Allez dans Edition> Préférences et activez l'option de démarrage automatique.

    Étape 6


6
la seiche est complètement cassée et n'a pas vu de mise à jour depuis un moment. Je souhaite qu'il puisse obtenir plus de développement, car nous avons besoin de quelque chose comme l'application Tasker d'Android pour Linux. Personne ne veut jouer avec etc / network / interfaces et les dossiers et scripts if-up. Donnez-moi simplement quelque chose sur lequel je peux cliquer ou basculer.
Joshua Robison

2

Je vais répondre à cette partie de la question du PO: "J'aimerais bien avoir ce support automatiquement"

Mon outil préféré pour le montage automatique des partages réseau est autofs: https://help.ubuntu.com/community/Autofs

AutoFS est mon outil de prédilection pour monter mon NAS - pour tous mes ordinateurs portables et stations de travail.

" autofs est un programme permettant de monter automatiquement des répertoires selon les besoins. Les montages automatiques ne sont montés qu’au moment de leur accès, et sont démontés après une période d’inactivité. De ce fait, le montage automatique des partages NFS / Samba préserve la bande passante et offre une meilleure performances globales comparées aux montages statiques via fstab. "


Votre réponse, si possible, peut être un peu tardive car le PO a déjà accepté l’autre réponse. Votre aide est bien sûr appréciée, mais vous pourriez être mieux servi en concentrant vos efforts sur les questions restées sans réponse
Wayne_Yux

Désolé Wayne, RBell a eu le dernier mot ici - la meilleure réponse (à propos de l'utilisation de Cuttlefish) n'est plus pertinente car ce paquet est obsolète - mais l'autofs existe toujours, et je ne l'avais pas vu sinon pour ce message. Merci, RBell!
KlaymenDK

1

Le moyen le plus simple et le plus simple consiste à ajouter une commande dans l'interface que vous souhaitez utiliser.

Les interfaces se trouvent dans le répertoire "/ etc / network /" sous le nom de fichier "interfaces"

iface elan0 inet manual
    up filename.sh

Cela ajoutera la commande up à elan0. Simillarly donne ceci à l’interface que tu veux travailler. N'oubliez pas d'indenter un espace de tabulation.

Assurez-vous de donner les autorisations d'exécution au fichier.

sudo chmod 755 filename.sh

1
Fantastique! Fonctionne avec tun0les interfaces VPN gérées par network-manager. La clé est l'utilisation de inet manual.
KrisWebDev

1

En ce qui me concerne, la /etc/network/if-up.d/solution n'a pas fonctionné de ma part, mais j'ai ajouté à /etc/network/interfacesceci:

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

Le Wifi commencerait après le redémarrage.

Mais après quelques difficultés, à partir de ce lien , ce qui a fonctionné a été d’ajouter le script /etc/NetworkManager/dispatcher.d/sous la forme 90myscript.shoù se 90trouve le niveau de priorité du script et avec la forme suivante:

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

Je suppose qu'il y a des problèmes entre qui contrôle la configuration du réseau au niveau du système et parfois le networkcomportement par défaut est laissé derrière celui du répartiteur.

Aussi, pour ceux qui voudraient - comme moi - essayer d’avoir un lien symbolique vers le script (pour stocker le fichier dans un meilleur emplacement), cela n’a malheureusement pas fonctionné pour moi.

J'espère que cela t'aides!


1

systemd semble avoir pris le relais de la mise en réseau de nos jours.

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

Il a aussi des unités correspondant aux interfaces

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

Apparemment, vous pouvez utiliser ces fichiers dans les fichiers d’unités de service. Il suffit donc de créer une unité de service pour exécuter votre script et d’utiliser quelque chose comme cela à l’intérieur pour le faire exécuter de manière conditionnelle sur le réseau:

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

Bonne chance! Je n'ai pas testé cela, donc "votre kilométrage peut varier".

Sources:

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.