Fazer o Network Manager reiniciar após a queda da conexão?

18

Usando o Ubuntu 11.10 (Unity 3D) e uma conexão de Internet a cabo (DSL) sem roteador ou modem.

Se eu desconectar minha conexão com a Internet, posso reconectar clicando no ícone do gerenciador de rede e selecionando uma conexão no menu suspenso, pois minhas conexões estão visíveis. Não há necessidade de reiniciar o gerenciador de rede.

Mas sempre que a conexão à Internet cai por si só , abro um terminal e uso, sudo service network-manager restartpois não vejo nenhuma conexão no menu suspenso do gerenciador de rede. Somente após o comando, o gerenciador de rede inicia e se conecta automaticamente.

Existe alguma configuração para que o gerenciador de rede não precise ser reiniciado toda vez que a conexão cair (em vez de desconectá-la quando não precisar ser reiniciada)?

Acho que em outras palavras, não quero que o gerenciador de rede pare enquanto estiver usando o computador, independentemente de minha conexão com o ISP ter caído ou não.

Não é muito importante abrir um terminal e digitar o comando e a senha, mas se houver uma maneira de garantir que o gerenciador de rede não pare, seria melhor.

edição datada de 26 de janeiro de 2012: linhas do syslog

Jan 25 20:09:36 aes-Inspiron-1545 pppd[3539]: No response to 3 echo-requests
Jan 25 20:09:36 aes-Inspiron-1545 pppd[3539]: Serial link appears to be disconnected.
Jan 25 20:09:36 aes-Inspiron-1545 pppd[3539]: Connect time 241.5 minutes.
Jan 25 20:09:36 aes-Inspiron-1545 pppd[3539]: Sent 3575961 bytes, received 79026206 bytes.
Jan 25 20:09:36 aes-Inspiron-1545 pppd[3539]: Connection terminated.
Jan 25 20:09:36 aes-Inspiron-1545 avahi-daemon[836]: Withdrawing workstation service for ppp0.
Jan 25 20:09:36 aes-Inspiron-1545 NetworkManager[3531]: <info> (eth0): device state change: activated -> failed (reason 'ppp-disconnect') [100 120 13]
Jan 25 20:09:36 aes-Inspiron-1545 NetworkManager[3531]: <warn> Activation (eth0) failed.
Jan 25 20:09:36 aes-Inspiron-1545 NetworkManager[3531]:    SCPlugin-Ifupdown: devices removed (path: /sys/devices/virtual/net/ppp0, iface: ppp0)
Jan 25 20:09:36 aes-Inspiron-1545 NetworkManager[3531]: <info> (eth0): now unmanaged
Jan 25 20:09:36 aes-Inspiron-1545 NetworkManager[3531]: <info> (eth0): device state change: failed -> unmanaged (reason 'removed') [120 10 36]
Jan 25 20:09:36 aes-Inspiron-1545 NetworkManager[3531]: <info> (eth0): deactivating device (reason 'removed') [36]
Jan 25 20:09:36 aes-Inspiron-1545 dbus[802]: [system] Activating service name='org.freedesktop.nm_dispatcher' (using servicehelper)
Jan 25 20:09:36 aes-Inspiron-1545 NetworkManager[3531]: <warn> could not read ppp stats: No such device
Jan 25 20:09:36 aes-Inspiron-1545 NetworkManager[3531]: <info> (eth0): cleaning up...
Jan 25 20:09:36 aes-Inspiron-1545 NetworkManager[3531]: <info> (eth0): taking down device.
Jan 25 20:09:36 aes-Inspiron-1545 kernel: [18027.155552] sky2 0000:09:00.0: eth0: disabling interface
Jan 25 20:09:36 aes-Inspiron-1545 avahi-daemon[836]: Interface eth0.IPv6 no longer relevant for mDNS.
Jan 25 20:09:36 aes-Inspiron-1545 avahi-daemon[836]: Leaving mDNS multicast group on interface eth0.IPv6 with address fec0::b:223:aeff:fe2d:2431.
Jan 25 20:09:36 aes-Inspiron-1545 avahi-daemon[836]: Withdrawing address record for 2002:1b00:3b4f:b:223:aeff:fe2d:2431 on eth0.
Jan 25 20:09:36 aes-Inspiron-1545 avahi-daemon[836]: Withdrawing address record for 2002:1b00:3754:b:223:aeff:fe2d:2431 on eth0.
Jan 25 20:09:36 aes-Inspiron-1545 avahi-daemon[836]: Withdrawing address record for 2002:7345:f137:b:223:aeff:fe2d:2431 on eth0.
Jan 25 20:09:36 aes-Inspiron-1545 avahi-daemon[836]: Withdrawing address record for fec0::b:223:aeff:fe2d:2431 on eth0.
Jan 25 20:09:36 aes-Inspiron-1545 NetworkManager[3531]: <info> Unmanaged Device found; state CONNECTED forced. (see http://bugs.launchpad.net/bugs/191889)
Jan 25 20:09:36 aes-Inspiron-1545 NetworkManager[3531]: <info> Unmanaged Device found; state CONNECTED forced. (see http://bugs.launchpad.net/bugs/191889)
Jan 25 20:09:36 aes-Inspiron-1545 pppd[3539]: Terminating on signal 15
Jan 25 20:09:36 aes-Inspiron-1545 pppd[3539]: Exit.
Jan 25 20:09:36 aes-Inspiron-1545 dbus[802]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Jan 25 20:11:56 aes-Inspiron-1545 modem-manager[3529]: <info>  Caught signal 15, shutting down...
Jan 25 20:11:56 aes-Inspiron-1545 NetworkManager[3531]: <info> caught signal 15, shutting down normally.
Jan 25 20:11:56 aes-Inspiron-1545 NetworkManager[3531]: <warn> quit request received, terminating...
Jan 25 20:11:56 aes-Inspiron-1545 NetworkManager[3531]: <info> (eth1): now unmanaged
Jan 25 20:11:56 aes-Inspiron-1545 NetworkManager[3531]: <info> (eth1): device state change: unavailable -> unmanaged (reason 'removed') [20 10 36]
Jan 25 20:11:56 aes-Inspiron-1545 NetworkManager[3531]: <info> Unmanaged Device found; state CONNECTED forced. (see http://bugs.launchpad.net/bugs/191889)
Jan 25 20:11:56 aes-Inspiron-1545 NetworkManager[3531]: <info> exiting (success)
Jan 25 20:11:56 aes-Inspiron-1545 modem-manager[6945]: <info>  ModemManager (version 0.5) starting...
Jan 25 20:11:56 aes-Inspiron-1545 NetworkManager[6947]: <info> NetworkManager (version 0.9.1.90) is starting...
Jan 25 20:11:56 aes-Inspiron-1545 NetworkManager[6947]: <info> Read config file /etc/NetworkManager/NetworkManager.conf
Jan 25 20:11:56 aes-Inspiron-1545 kernel: [18167.470749] init: reconnect main process (6948) terminated with status 2
Jan 25 20:11:56 aes-Inspiron-1545 modem-manager[6945]: <info>  Loaded plugin Nokia
Jan 25 20:11:56 aes-Inspiron-1545 modem-manager[6945]: <info>  Loaded plugin Ericsson MBM
Jan 25 20:11:56 aes-Inspiron-1545 modem-manager[6945]: <info>  Loaded plugin MotoC

insira a descrição da imagem aqui


fonte
Por favor, tente estas duas soluções: (1) forums.fedoraforum.org/showthread.php?t=229718#2 (2) platonic.techfiz.info/2009/07/28/… - Infelizmente não tenho banda larga móvel conexão para experimentá-los.
Savvas Radevic
@medigeek, mesmo eu não tenho uma conexão móvel. É uma conexão DSL (com fio): um cabo conectado a um soquete do tipo telefone. Não há nenhum roteador ou modem no meu final.
@ vasa1 desconecte sua conexão DSL e emita este comando no terminal. nmcli con up id "DSL connection 1". Como não tenho DSL, preciso de sua ajuda com todos os comandos e saídas. Comente sua saída.
Rahul Virpara
dar saída:nmcli -t -f TYPE,STATE dev
Rahul Virpara

Respostas:

16

Aqui está um script Upstart que você pode colocar /etc/init/reconnect.conf:

start on started network-manager
stop on runlevel [016]

script
  while true; do
    if ifconfig eth0 | grep -q "inet addr:"; then
       # echo "all ok!"
    else
       restart network-manager
    fi
    sleep 5
  done
end script

Ao perder um endereço IP para eth0 (configure para sua interface se for diferente), ele reiniciará o trabalho do gerenciador de rede e restaurará a conectividade.

Tuminoide
fonte
Isso tudo é novo para mim, por isso vou gostar de segurar as mãos. Eu faço um arquivo de texto chamado reconnect.conf e o coloco em / etc / init com a permissão "root"? Eu uso o texto palavra por palavra? Nas minhas "Conexões de rede ativas", vejo "Interface: Ethernet (eth0)". O nome da minha conexão é "vasa1". Deixo "inet addr:" como está ou devo inserir algum valor? O Ubuntu saberá que esse arquivo precisa ser lido? Ou tenho que fazer alguma coisa?
1
Fazer exatamente como você disse, como root fazer um arquivo chamado reconnect.confpara /etc/init. A única coisa que você precisa mudar é eth0 para outra coisa, se não estiver correta. inet addr:parte é apenas um filtro para grep e não deve ser tocado. O nome da conexão relevante pode ser verificado via ifconfig. O Upstart lerá esse arquivo automaticamente e você deverá fazer sudo start reconnecto trabalho. Na próxima reinicialização, ele será iniciado automaticamente.
Tuminoid
A primeira linha ifconfigcomeça com, ethoentão eu usarei isso e depois sudo start reconnectquando a conexão cair. Vou postar de volta com o resultado. Obrigado!
Eu criei /etc/init/reconnect.confe reiniciei. Quando minha conexão caiu algum tempo após a reinicialização, o nm não reiniciou. Então eu emiti sudo start reconnect. reconnect stop/waitingfoi a resposta, mas nm não foi reiniciado. Eu tinha sudo service network-manager restartque é o que normalmente faço. Em vez de restart network-manager, algo como restart service network-managerseria necessário? (BTW, eu colocar eth0 e não etho (ao contrário do que está lá no meu comentário anterior))
No meu sistema, o gerenciador de rede é um trabalho inicial para o nm e os comandos acima funcionam bem para mim, mas sinta-se à vontade para alterar o comando restart para o que funcionar em seu sistema, como service network-manager restart. Apenas curioso, qual é o resultado do status network-managerseu sistema? Se isso indicar stop/waiting(ou ocorrer um erro) após a reinicialização, você precisará alterar o início para algo como start on runlevel [2345]e adicionar sleep 60antes.
Tuminoid
2

Uma solução rápida e suja é escrever um script que seja executado ping -i 5 google.com || service network-manager restartcomo root (você pode escrever um /etc/init.d/-daemon para isso, mas como a solução é MUITO suja, eu não faria isso)

Esse script reiniciaria o gerenciador de rede toda vez que o Google não for encontrado e verifica uma vez a cada quinto segundo.

sakjur
fonte
Votei nisso, apesar de não entender a solução, porque nunca escrevi um script antes. Poderia, por favor, fornecer detalhes passo a passo?
Estou fazendo algumas leituras e quero saber se não há problema em executar ping repetidamente em um site. Tenho a impressão de que o ping é usado principalmente para solucionar problemas.
1
Provavelmente não, essa é uma das razões pelas quais está sujo;) tente usar a solução Tuminoids um pouco, isso não funciona se os servidores DNS forem problemáticos, mas deve funcionar na maioria dos casos!
sakjur
Im bastante um novato e didn get o que está sujo na sua resposta ..
Kernel_Panic
1
Basicamente, ele funciona enviando uma solicitação ao Google uma vez a cada cinco segundos e reinicie o gerenciador de rede se você não puder acessar o Google. Está sujo porque não é uma boa maneira de fazê-lo, não é uma maneira eficaz de fazê-lo e você pode fazer com que um administrador de sistema bloqueie seu endereço IP;) (acho que o Google não faria isso, mas não é muito de qualquer maneira agradável) Pense nisso como sentar e cutucar uma pessoa para ver se você ainda está vivo;)
sakjur
2

Experimente o wicd, em vez do gerenciador de rede, foi recomendado para um caso semelhante: https://bbs.archlinux.org/viewtopic.php?id=124443

Não sei se isso resolverá o problema nem se o wicd suporta pppoe.

  1. Faça backup dos arquivos .deb, apenas no caso de:

    sudo apt-get download network-manager network-manager-gnome
    
  2. Limpe o gerenciador de rede e instale o wicd

    sudo apt-get purge network-manager network-manager-gnome
    sudo apt-get install wicd wicd-gtk
    
  3. Reinicie. Tente conectar usando o wicd.

Se algo der errado, limpe o wicd e reinstale o gerenciador de rede:

sudo apt-get purge wicd wicd-gtk
sudo dpkg -i network-manager*.deb
Savvas Radevic
fonte
Muito obrigado, medigeek! Três pontos. Um, no caso do archlinux, o OP não voltou a postar se a alteração no wicd resolveu o problema. Segundo, embora seja um inconveniente, hesito em mudar do padrão. Por enquanto, estou usando este alias: alias nm='echo "password" | sudo -S service network-manager restart'como uma solução alternativa. Terceiro, de seus outros links úteis, parece que o problema não tem nada a ver com o Ubuntu, mas é "upstream" e, portanto, vou perguntar se essa pergunta deve ser encerrada.
1
Verdadeiro para o primeiro ponto, provavelmente eu devo excluir a resposta, pois a página de perguntas frequentes do wicd diz que não suportará pppoe até a versão 2.0 do wicd. Para o ponto # 3, você pode tentar arquivar um bug do upstream diretamente (pppd ou network-manager?)
Savvas Radevic
Eu me adicionei ao bug da barra de ativação que você forneceu.
0

Eu criei um script para este problema:

#!/bin/bash

for(( ; ; ))
do
VALUE=$(ifconfig | grep ppp0| awk '{print $1}')
        if [ "$VALUE" != "ppp0" ]; then
                {       eval restart network-manager
                        eval sleep 5
                }
        fi
done

Isso está funcionando bem, mas esse script está consumindo muito da minha CPU. Alguém pode me ajudar a diminuir o uso da CPU?

Jyoti Prakash
fonte
Se você quiser fazer uma nova pergunta, faça-a em separado. Como perguntar
Aditya
0

Por que estou respondendo a esta pergunta?

Existem respostas muito boas, mas tudo é escrito usando init ou upstart. A partir de agora estaremos usando o systemd, estou escrevendo um script e informações melhores. sobre como fazer isso.

Mas existe um caminho?

É, existe um caminho. Você só precisa criar um script que monitore o estado da sua rede e reinicie o Network Manager sob demanda. Criaremos esse script e um serviço systemd que será iniciado com o sistema e monitorará o status da sua rede a cada 5 segundos para descobrir se você está online ou não.

O que devo fazer?

Primeiro de tudo, precisamos instalar a ferramenta fping para fazer um dos testes de conexão (o retorno de fping "está ativo" se uma conexão é possível e "endereço não encontrado", se não):

$ sudo apt-get install fping -y

Agora vamos criar o script de monitor em nosso sistema. Crie um arquivo em / usr / local / bin / chamado nm-watcher:

$ sudo touch /usr/local/bin/nm-watcher

E edite-o usando o nano ou o seu editor de texto preferido:

$ sudo nano /usr/local/bin/nm-watcher

Copie e cole esse script dentro do editor, salve e feche o arquivo (se você estiver usando o nano, como neste tutorial, use "CTRL + X" "Y" e "ENTER" em sequência). Não se esqueça de alterar wlan0 para a interface que você deseja que o wm-watcher monitore:

#!/bin/bash

while true; do #create a infinite loop to keep looking at your connection
        NET=$(ifconfig wlan0 | grep "inet inet addr:") # verify if the interface has an assigned IP
        ROUTE=$(fping google.com 2>&1 | grep "alive") # try to ping google.com and verify if we have any response
        WEB=$(wget --tries=10 --timeout=20 --spider http://google.com 2>&1 | grep "OK") # spiders google.com to verify if the page exists. returns error if a connections is not possible

        if [ ! "$NET" != "" ] || [ ! "$ROUTE" != "" ] || [ ! "$WEB" != "" ]; then # verify if any of the above conditions aren't OK
                service network-manager restart
        fi

        sleep 5
done

Para executar este script, precisamos torná-lo executável:

$ sudo chmod 755 /usr/local/bin/nm-watcher

Agora, criaremos o serviço SystemD, para isso, você deve criar e editar o arquivo nm-watcher.service em / etc / systemd / system /:

$ sudo touch /etc/systemd/system/nm-watcher.service && sudo nano /etc/systemd/system/nm-watcher.service

E coloque esse conteúdo dentro do arquivo:

[Unit]
Description=NetworkManager Watcher
Wants=NetworkManager.service
Before=NetworkManager.service

[Service]
ExecStart=/usr/local/bin/nm-watcher

[Install]
WantedBy=multi-user.target

Isso criará o arquivo de serviço que faz o SystemD chamar o script que criamos antes a cada inicialização, depois de estabelecermos uma conexão usando o network-manager.service.

Devemos saber ativar este serviço para executar usando:

$ sudo systemctl enable nm-watcher.service

E inicie o serviço digitando:

$ sudo service nm-watcher start

Para verificar se o serviço está em execução, digite:

$ sudo service nm-watcher status

Se você tiver algum problema com o serviço, poderá ver as mensagens de depuração usando:

$ sudo journalctl -u nm-watcher

Devo fazer outras coisas?

Não, é tudo o que é necessário para realizar esta tarefa. Esse script tem um impacto muito baixo no desempenho do sistema, como você pode ver nesta captura de tela:

pegada do observador nm

Alexandre Teles
fonte
0

No meu laptop mais antigo, eu tinha um cartão WiFi ruim, com tendência a desconectar-se do WiFi se houvesse muita carga (por exemplo, baixar arquivos grandes etc.).

Criei um script simples para verificar se minha internet ainda estava conectada e, se não estava, reinicie o gerenciador de rede.

#!/bin/bash

ping -c 1 8.8.8.8
received=$?
echo $received
if [[ $received -ne 0 ]] ; then
    service network-manager restart
fi

Criei um cronjob raiz com sudo crontab -ee o defini de modo que, a cada minuto (você pode fazê-lo com menos frequência, mas o script é um ping simples, portanto, não requer muitos recursos), ele executaria o script.

Portanto, se o meu WiFi sair por algum motivo, ele só sairá por cerca de um minuto de cada vez, no máximo. Se você não estiver familiarizado cron, recomendo a leitura deste

Try431
fonte