web-dev-qa-db-fra.com

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

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?

47
jmite

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

De même, après avoir ajouté le script, exécutez chmod +x /etc/network/if-up.d/yourscriptname pour 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.

55
dedunumax

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

Ubuntu 12.04

  • Installer 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 Seiche et cliquez sur New.

    Step-1

    • Donnez-lui un nom et changez l'option activée par stimulus en ON.
    • Cliquez sur Stimulus , sélectionnez la catégorie Réseau et tapez Connectez-vous au WLAN . Cliquez sur OK.

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

    Step 3

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

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

    Step-5

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

    Step-6

25
ignite

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 - sur tous mes ordinateurs portables et stations de travail.

" autofs est un programme permettant de monter automatiquement des répertoires en fonction des besoins. Les montages automatiques sont montés uniquement lors de leur accès et sont démontés après une période d'inactivité. C'est pourquoi le montage automatique Les partages NFS/Samba préservent la bande passante et offrent de meilleures performances globales par rapport aux montages statiques via fstab. "

1
RBell

La méthode la plus simple, la plus simple et la plus simple consiste à ajouter une commande dans n'importe quelle interface sur laquelle vous souhaitez travailler.

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
Revanth Kumar

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

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 efforts, de ce lien , ce qui a fonctionné a été d’ajouter le script à /etc/NetworkManager/dispatcher.d/ sous la forme 90myscript.sh90 est 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

J'imagine qu'il y a des problèmes entre qui contrôle la configuration du réseau au niveau du système et que le comportement par défaut networkest laissé derrière celui du dispatcheur.

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
Augustin Riedinger

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:

0
Rolf