2 votes

Script shell pour redémarrer network-manager - pas depuis le terminal

Ma question peut sembler étrange, mais elle a vraiment du sens si votre connexion Internet se coupe toutes les quelques heures.

Je veux savoir comment je peux redémarrer le network-manager en utilisant un script shell.

Maintenant, je sais que sudo service network-manager restart est la façon de le faire dans le terminal, mais malheureusement cela ne fonctionne pas dans un script shell.

Des idées ?

4voto

user107779 Points 21

J'ai également eu un problème très similaire. Mon Internet est tellement instable que lorsqu'il y a des fluctuations de courant, le modem se déconnecte et ne peut pas être vu à moins de débrancher et rebrancher le modem. Sinon, vous pouvez utiliser usb_modeswitch. J'ai donc pris le script ci-dessus et l'ai ajusté pour faire les deux tâches.

#!/bin/bash

while true; do
#Tout ce qui est inférieur à une connexion solide redémarre le modem USB
LC_ALL=C nmcli -t -f TYPE,STATE dev | grep -q "^cdma:connected$"
if [ ! $? -eq 0 ]; then

#Réinitialiser le Modem USB (12d1:1001 devra être changé pour correspondre à votre modem)
sudo usb_modeswitch -R -v 12d1 -p 1001
#Attendre 20 secondes avant de tenter de rétablir les connexions haut débit
sleep 20
    nmcli -t nm wwan on
#Attendre encore 20 secondes, puis tester si la connexion s'est rétablie d'elle-même car elle est configurée pour une connexion automatique
    sleep 20
LC_ALL=C nmcli -t -f TYPE,STATE dev | grep -q "^cdma:disconnected$"
if [ $? -eq 0 ]; then        
    nmcli -t con up id "connexion Zantel"
    sleep 15
fi
    #attendre environ 15 secondes pour se connecter

fi
#il ne vaut pas la peine de vérifier toutes les millisecondes.
#ma connexion sera rétablie en 5 à 15 secondes
sleep 2
#si quelqu'un peut le coder mieux, n'hésitez pas à commenter
#À FAIRE : vérifier si des données ont été reçues. si les données < 15 Ko après 20 secondes de connexion
#reconnecter la connexion haut débit mobile
done

Merci!

3voto

Srinivas Gowda Points 2308

Non ce n'est pas du tout bizarre, je rencontre aussi souvent des problèmes de connectivité lorsque j'utilise mon modem net-setter USB.

entrer la description de l'image ici

Voici comment vous faites :

gksu service network-manager restart

Enregistrez-le dans un fichier avec l'extension .sh et accordez les permissions d'exécution en cliquant avec le bouton droit >> propriétés >> permissions.

3voto

Rahul Virpara Points 10982

nmcli est un outil en ligne de commande pour contrôler NetworkManager et obtenir son statut.

J'ai également eu le même problème en utilisant le haut débit mobile.

J'ai créé un script shell comme suit. Enregistrez-le, donnez l'autorisation d'exécution et mettez-le dans les Applications de Démarrage et cela fonctionne à merveille! Il se connectera automatiquement si la connexion est interrompue. C'est ce que je voulais.

Vous devez changer l'identifiant du réseau (pour moi c'est "Tata Docomo Internet"). Remplacez "Tata Docomo Internet" par le nom de votre connexion haut débit mobile.

#!/bin/bash

while true; do
    LC_ALL=C nmcli -t -f TYPE,STATE dev | grep -q "^gsm:disconnected$"
    if [ $? -eq 0 ]; then
        #jdownloader est toujours en cours de téléchargement donc arrêtez-le car
        #la connexion Internet est interrompue et jdownloader ne reprendra pas le téléchargement
        #quand connecté à nouveau
        #jdownloader --stop-download
        #parfois je ne peux pas me connecter après une déconnexion quand
        #je clique sur . Je dois désactiver
        #et réactiver le Haut Débit Mobile
        nmcli -t nm wwan off
        sleep 1
        nmcli -t nm wwan on
        sleep 1
        nmcli -t con up id "Tata Docomo Internet"
        #attendre environ 15 secondes pour être connecté
        #si quelqu'un peut ajouter une meilleure commande pour vérifier, laissez un commentaire :-p
        sleep 15
        #maintenant connecté à Internet donc commencez le téléchargement
        #jdownloader --start-download
    fi
    #ça ne vaut pas la peine de vérifier chaque milliseconde.
    #ma connexion sera rétablie en 5-15 secondes
    sleep 2
    #si quelqu'un peut coder mieux, n'hésitez pas à commenter
    #À FAIRE:: vérifier les données reçues. si les données < 15 Ko après 20 secondes de connexion
    #rétablir la connexion haut débit mobile
done

1voto

user107779 Points 21

C'est une meilleure solution au problème précédent.

J'ai créé 2 scripts, le premier est le suivant...

sudo /home/{votre nom d'utilisateur}/UMM.sh

En lançant ceci "Dans le Terminal", si vous créez une icône, vous pourrez entrer votre mot de passe sudo.

Le fichier UMM.sh qu'il appelle est le suivant... Pour le faire fonctionner pour vous, vous devrez lire et changer les choses en haut du script. Vous devrez également peut-être modifier certaines lignes sleep pour correspondre à votre situation.

Amusez-vous bien !

#!/bin/bash

# *****************************************************************
#Changez les valeurs suivantes en fonction de votre type de connexion et de votre nom

#Exécution de 'nmcli -t -f TYPE,STATE dev'
#cdma ou gsm (à éditer ci-dessous)
ConType="cdma"

#Exécution de 'nmcli -t -f NAME,TYPE con'
#Le nom de votre connexion dans le gestionnaire de réseau (à éditer ci-dessous)
ConName="connexion Zantel"

#Exécution de 'lsusb' 
#Obtenez l'ID du vendeur et du modèle pour votre modem (à éditer ci-dessous)
USB_Vendor=12d1
USB_Product=1001

#Exécution de 'ifconfig' 
#Obtenez la connexion Internet (à éditer ci-dessous)
IntCon=ppp0

# ******************************************************************

Network_State=$(nmcli -t -f TYPE,STATE dev)

echo -e 
echo -e "État du réseau actuel: \r"
echo $Network_State

i=0
error_count=0
#défaut 600
Good_connect_count=600
i=$[Good_connect_count - 50]
Default_ping_host="google.com"
pingtest=0

while true; do

#Tout d'abord déterminer la nature du problème s'il existe
#Vérifiez si notre type de connexion existe même
MT=C nmcli -t -f TYPE,STATE dev | grep -q $ConType

if [ $? -eq 0 ]; then

    #Vérifiez si le WWAN est activé
    MT=C nmcli -t -f WWAN nm | grep -q "enabled"

    if [ $? -eq 0 ]; then

        #Vérifiez si nous avons une connexion ppp0
        MT=C ifconfig | grep -q $IntCon

        if [ $? -eq 0 ]; then
            error_count=$error_count
        else

            dt=$(date)
            echo À $dt nous n'avons pas de connexion $IntCon...
            echo Tentative de démarrage de $ConName
            nmcli -t con up id "$ConName"
            sleep 5
            MT=C ifconfig | grep -q $IntCon

            if [ $? -eq 0 ]; then
                #error_count=0
                i=$Good_connect_count
            else
                error_count=$[$error_count+1]
                echo "$error_count Erreur(s) d'affilée"
            fi

        fi
    else

        dt=$(date)
        echo À $dt nous n'avons pas de WWAN... tentative d'activation
        nmcli -t nm wwan on
        sleep 5

        MT=C nmcli -t -f WWAN nm | grep -q "enabled"

        if [ $? -eq 0 ]; then
            error_count=$error_count
        else
            error_count=$[$error_count+1]
            echo "$error_count Erreur(s) d'affilée"
        fi
    fi

else
    dt=$(date)
    echo À $dt nous n'avons pas notre connexion $ConType
    echo Redémarrer le périphérique USB $USB_Vendor : $USB_Product
    #Réinitialiser le modem USB
    usb_modeswitch -Q -R -v $USB_Vendor -p $USB_Product
    error_count=0
    sleep 25
fi

if [ $error_count -ge 3 ]; then
    dt=$(date)
    echo Nous avons un problème. Redémarrage du périphérique USB à $dt. 
    usb_modeswitch -Q -R -v $USB_Vendor -p $USB_Product
    sleep 25
    error_count=0
    i=0
fi

i=$[$i+1]
if [ $i -ge $Good_connect_count ]; then
    dt=$(date)
    if [ $pingtest -eq 0 ]; then

        MT=C ping -c1 $Default_ping_host | grep -q "64 bytes from"
        if [ $? -eq 0 ]; then
            echo À $dt la connexion est établie et le test de ping a réussi !
            #error_count=0
            i=0
            pingtest=1
        else
            echo La connexion est présente mais je ne peux pas confirmer la connectivité du ping. Nouvelle tentative...
            error_count=$[$error_count+1]
            echo "$error_count Erreur(s) d'affilée"
        fi
    else
        pingtest=0

        MT=C wget --spider http://www.hp.com 2>&1 | grep -q "200"
        if [ $? -eq 0 ]; then
            echo À $dt la connexion est établie et le test HTTP a réussi !
            error_count=0
            i=0
        else
            echo La connexion est présente mais je ne peux pas confirmer la connectivité HTTP. Nouvelle tentative...
            error_count=$[$error_count+1]
            echo "$error_count Erreur(s) d'affilée"
        fi

    fi
fi

done

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X