shell script para reiniciar o network-manager - não do terminal

2

Minha pergunta pode parecer estranha, mas realmente faz sentido se sua conexão com a Internet continuar apagando a cada poucas horas.

Eu quero saber como posso reiniciar o gerenciador de rede usando um script de shell.

agora eu sei que sudo service network-manager restart é como você faz isso no terminal, mas infelizmente isso não funciona em um script de shell.

Alguma idéia?

    
por Rupali 25.05.2012 / 16:16

4 respostas

3

Não, não é nada estranho, eu também tenho problemas de conectividade quando uso meu modem USB.

Veja como você faz isso

% bl0ck_qu0te%

salve-o em um arquivo com a extensão .sh e conceda a permissão de arquivo executável clicando com o botão direito do mouse em > > propriedades > > permissões

    
por Srinivas Gowda 25.05.2012 / 16:18
4

Eu também tive um problema muito parecido. Minha internet é tão esquisita que, quando há flutuações de energia, o modem fica desligado e não pode ser visto a menos que você puxe o modem e conecte-o novamente. Caso contrário, você pode usar usb_modeswitch. Então peguei o script acima e o ajustei para fazer as duas tarefas.

#!/bin/bash

while true; do
#Anything less than a solid connection reboots the USB modem
LC_ALL=C nmcli -t -f TYPE,STATE dev | grep -q "^cdma:connected$"
if [ ! $? -eq 0 ]; then

#Reset USB Modem (12d1:1001 will have to be changed to match your modem)
sudo usb_modeswitch -R -v 12d1 -p 1001
#Wait 20 Seconds before trying to bring up the Broadband connections
sleep 20
    nmcli -t nm wwan on
#Wait Another 20 Seconds then test if the connection came up on its own as it is set to auto-connect
    sleep 20
LC_ALL=C nmcli -t -f TYPE,STATE dev | grep -q "^cdma:disconnected$"
if [ $? -eq 0 ]; then        
    nmcli -t con up id "Zantel connection"
    sleep 15
fi
    #wait approximately 15 sec to get connected

fi
#it does not worth keep it checking every millisecond.
#my connection will be reestablished within 5-15 seconds
sleep 2
#if anyone can code it better please feel free to comment
#TO-DO:: check for data received. if data < 15 KB after 20 seconds of connection
#reconnect mobile broadband connection  
done

Obrigado!

    
por Xt8088 13.11.2012 / 16:07
3

nmcli é uma ferramenta de linha de comando para controlar o NetworkManager e obter seu status.

Eu também tive o mesmo problema ao usar o Mobile Broadband.

Eu criei um script de shell da seguinte maneira. Salvá-lo, dar permissão de execução e colocar isso em aplicativos de inicialização e funciona como um encanto! Ele se conectará automaticamente se a conexão for interrompida. Isso é o que eu queria.

Você precisa alterar o id de rede (para mim, é "Tata Docomo Internet" ). Substitua "Tata Docomo Internet" pelo nome do seu nome de conexão de banda larga móvel.

#!/bin/bash

while true; do
    LC_ALL=C nmcli -t -f TYPE,STATE dev | grep -q "^gsm:disconnected$"
    if [ $? -eq 0 ]; then
        #jdownloader is still in the download status so stop it because
        #internet is disconnected and jdownloader won't resume download 
        #when connected again
        #jdownloader --stop-download
        #sometimes I can not get connected after disconnection when 
        #I click on <name of the network connection>. I have to disable
        #and enable Mobile Broadband
        nmcli -t nm wwan off
        sleep 1
        nmcli -t nm wwan on
        sleep 1
        nmcli -t con up id "Tata Docomo Internet"
        #wait approximately 15 sec to get connected
        #if anyone can add better command to check for it just comment it :-p 
        sleep 15
        #now connected to internet so start download
        #jdownloader --start-download
    fi
    #it does not worth keep it checking every millisecond.
    #my connection will be reestablished within 5-15 seconds
    sleep 2
    #if anyone can code it better please feel free to comment
    #TO-DO:: check for data received. if data < 15 KB after 20 seconds of connection
    #reconnect mobile broadband connection  
done
    
por Rahul Virpara 25.05.2012 / 16:21
1

Esta é uma solução melhor para o problema anterior.

Eu criei 2 scripts, o primeiro é este ...

sudo /home/{your user name}/UMM.sh

Ao iniciar este "In Terminal", se você criar um ícone, poderá digitar sua senha sudo.

O UMM.sh que ele chama é o seguinte ... Para fazer o trabalho para você, você terá que ler e alterar as coisas no topo do script. Você também pode ter que alterar algumas das linhas sleep para se adequar à sua situação.

Divirta-se!

#!/bin/bash

# *****************************************************************
#Change the following values based on your connection type and name

#Running 'nmcli -t -f TYPE,STATE dev'
#cdma or gsm (edit below)
ConType="cdma"

#Running 'nmcli -t -f NAME,TYPE con'
#The name of your connection in the network manager (edit below)
ConName="Zantel connection"

#Running 'lsusb' 
#Get the Vendor and Model ID for your modem (edit below)
USB_Vendor=12d1
USB_Product=1001

#Running 'ifconfig' 
#Get the Internet Connection (edit below)
IntCon=ppp0

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

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

echo -e 
echo -e "Current Network Status: \r"
echo $Network_State

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

while true; do

#First off determine nature of problem if one exists
#Test to see if our connection type even exists
MT=C nmcli -t -f TYPE,STATE dev | grep -q $ConType

if [ $? -eq 0 ]; then

    #Check to see if the WWAN is enabled
    MT=C nmcli -t -f WWAN nm | grep -q "enabled"

    if [ $? -eq 0 ]; then

        #Check to see if we have a ppp0 connection
        MT=C ifconfig | grep -q $IntCon

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

            dt=$(date)
            echo At $dt we have no $IntCon connection...
            echo Attempting to start $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 Error(s) in a row"
            fi


        fi
    else

        dt=$(date)
        echo At $dt we have no WWAN...attempting to Enable
        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 Error(s) in a row"
        fi
    fi

else
    dt=$(date)
    echo At $dt we dont have our $ConType connection
    echo Rebooting USB Device $USB_Vendor : $USB_Product
    #Reset USB Modem
    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 We have an issue. Rebooting USB Device at $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 At $dt connection is up and ping test passed!
            #error_count=0
            i=0
            pingtest=1
        else
            echo Connection is present but cant confirm ping connectivity. Retrying...
            error_count=$[$error_count+1]
            echo "$error_count Error(s) in a row"
        fi
    else
        pingtest=0


        MT=C wget --spider http://www.hp.com 2>&1 | grep -q "200"
        if [ $? -eq 0 ]; then
            echo At $dt connection is up and http test passed!
            error_count=0
            i=0
        else
            echo Connection is present but cant confirm http connectivity. Retrying...
            error_count=$[$error_count+1]
            echo "$error_count Error(s) in a row"
        fi

    fi
fi

done
    
por Xt8088 20.08.2013 / 07:29