¿Hacer que Network Manager se reinicie después de una conexión caída?

18

Usando Ubuntu 11.10 (Unity 3D) y una conexión a Internet por cable (DSL) sin enrutador o módem.

Si me desconecto la conexión a Internet, puedo volver a conectar haciendo clic en el icono del gestor de la red y seleccionar una conexión desde el menú desplegable desde mis conexiones son visibles. No es necesario reiniciar el administrador de red.

Pero cada vez que la conexión a Internet cae por sí sola , abro una terminal y la uso, sudo service network-manager restartya que no veo ninguna conexión en el menú desplegable del administrador de red. Solo después del comando, el administrador de red se inicia y se conecta automáticamente.

¿Hay alguna configuración para que el administrador de red no tenga que reiniciarse cada vez que se corta la conexión (a diferencia de que la desconecte cuando no necesita reiniciar)?

En otras palabras, supongo que no quiero que el administrador de red se detenga mientras esté usando la computadora, independientemente de si mi conexión con el ISP se ha caído o no.

No es un gran problema abrir un terminal y escribir el comando y la contraseña, pero si hay una manera de garantizar que el administrador de red no se detenga, sería mejor.

Edición del 26 de enero de 2012: líneas de 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

ingrese la descripción de la imagen aquí


fuente
Pruebe estas dos soluciones: (1) forums.fedoraforum.org/showthread.php?t=229718#2 (2) platonic.techfiz.info/2009/07/28/… - Lamentablemente no tengo una banda ancha móvil conexión para probarlos.
Savvas Radevic
@medigeek, incluso yo no tengo una conexión móvil. Es una conexión DSL (por cable): un cable que se conecta a una toma de teléfono. No hay un enrutador o módem interviniente en mi extremo.
@ vasa1 desconecte su conexión DSL y emita este comando en la terminal. nmcli con up id "DSL connection 1". No tengo DSL, así que necesito tu ayuda con todos los comandos y resultados. Comenta tu salida.
Rahul Virpara
dar salida:nmcli -t -f TYPE,STATE dev
Rahul Virpara

Respuestas:

16

Aquí hay un script de Upstart que puede colocar para /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

Al perder una dirección IP para eth0 (configure su interfaz si es diferente), reiniciará el trabajo del administrador de red y restaurará la conectividad.

Tuminoide
fuente
Todo esto es nuevo para mí, así que agradeceré tomarlo de la mano. ¿Hago un archivo de texto llamado reconnect.conf y lo coloco en / etc / init con el permiso "root"? ¿Utilizo el texto palabra por palabra? En mis "Conexiones de red activas" veo "Interfaz: Ethernet (eth0)". Mi nombre de conexión es "vasa1". ¿Dejo "inet addr:" como está o debo ingresar algún valor? ¿Ubuntu sabrá que este archivo tiene que ser leído? ¿O tengo que hacer algo?
1
Hacer exactamente como usted ha dicho, como root crea un archivo llamado reconnect.confa /etc/init. Lo único que necesita cambiar es eth0 a otra cosa si no es correcta. inet addr:La parte es solo un filtro para grep y no debe tocarse. El nombre de conexión relevante se puede verificar a través de ifconfig. Upstart leerá este archivo automáticamente y debe hacerlo sudo start reconnectpara comenzar el trabajo. En el próximo reinicio, se iniciará automáticamente.
Tuminoide
La primera línea ifconfigcomienza con, ethoasí que usaré eso y luego sudo start reconnectcuando la conexión se caiga. Volveré a publicar con el resultado. ¡Gracias!
He creado /etc/init/reconnect.confy reiniciado. Cuando mi conexión cayó un poco después de reiniciar, nm no se reinició. Así que emití sudo start reconnect. reconnect stop/waitingfue la respuesta pero nm no se reinició. Tenía sudo service network-manager restartque hacer lo que hago normalmente. En lugar de restart network-manager, ¿se requeriría algo así restart service network-manager? (Por cierto, puse eth0 y no etho (a diferencia de lo que hay en mi comentario anterior))
En mi sistema, el administrador de red es un trabajo inicial para el nm y los comandos anteriores funcionan bien para mí, pero siéntase libre de cambiar el comando de reinicio a lo que funcione en su sistema, como service network-manager restart. Por curiosidad, ¿cuál es el resultado de status network-managersu sistema? Si eso dice stop/waiting(o da un error) después del reinicio, debe cambiar el inicio a algo así start on runlevel [2345]y agregar sleep 60antes mientras.
Tuminoide
2

Una solución rápida y sucia es escribir un script que se ejecute ping -i 5 google.com || service network-manager restartcomo root (podría escribir un /etc/init.d/-daemon para eso, pero como la solución es MUY sucia, no haría eso)

Ese script reiniciará el administrador de red cada vez que no se encuentre Google y se verificará una vez cada cinco segundos.

sakjur
fuente
Lo voté a pesar de que no entiendo la solución porque nunca antes había escrito un script. ¿Podría por favor dar detalles paso a paso?
Estoy leyendo un poco y quiero saber si está bien hacer ping repetidamente a un sitio. Tengo la impresión de que el ping se usa principalmente para la resolución de problemas.
1
Probablemente no, esa es una de las razones por las que está sucio;) intente usar la solución Tuminoids un poco, eso no funciona si los servidores DNS son problemáticos, ¡pero debería funcionar en la mayoría de los casos!
sakjur
Soy un novato y no
obtuve lo
1
Básicamente, funciona enviando una solicitud a Google una vez cada cinco segundos y reinicia el administrador de red si no puede comunicarse con Google. Está sucio porque no es una buena manera de hacerlo, no es una forma efectiva de hacerlo y puede hacer que un administrador de sistemas bloquee su dirección IP en algún lugar;) (No creo que Google haga eso, pero no es muy bueno de todos modos) Piense en ello como sentarse y tocar a una persona para ver si todavía está vivo;)
sakjur
2

Pruebe wicd en lugar de network-manager, se ha recomendado para un caso similar: https://bbs.archlinux.org/viewtopic.php?id=124443

No sé si solucionará el problema ni si wicd admite pppoe.

  1. Copia de seguridad de los archivos .deb, por si acaso:

    sudo apt-get download network-manager network-manager-gnome
    
  2. Purgue el administrador de red e instale wicd

    sudo apt-get purge network-manager network-manager-gnome
    sudo apt-get install wicd wicd-gtk
    
  3. Reiniciar. Intenta conectarte usando wicd.

Si algo sale mal, simplemente purgue wicd y reinstale el administrador de red:

sudo apt-get purge wicd wicd-gtk
sudo dpkg -i network-manager*.deb
Savvas Radevic
fuente
Muchas gracias, medigeek! Tres puntos. Uno, en el caso de Archlinux, el OP no ha vuelto a publicar si el cambio a wicd resolvió el problema. En segundo lugar, si bien es un inconveniente, dudo en cambiar el valor predeterminado. Por ahora, estoy usando este alias: alias nm='echo "password" | sudo -S service network-manager restart'como solución alternativa. En tercer lugar, desde sus otros enlaces útiles, parece que el problema no tiene nada que ver con Ubuntu, sino que está "corriente arriba", por lo que voy a preguntar si esta pregunta debería cerrarse.
1
Es cierto para el primer punto, probablemente debería eliminar la respuesta, ya que la página de preguntas frecuentes de wicd dice que no admitirá pppoe hasta la versión 2.0 de wicd. Para el punto n. ° 3, puede intentar presentar un error directamente en sentido ascendente (pppd o administrador de red)
Savvas Radevic
Me agregué al error de launchpad que proporcionaste.
0

He hecho un 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

Esto funciona bien, pero este script está tomando demasiado de mi CPU. ¿Alguien puede ayudarme a reducir el uso de la CPU?

Jyoti Prakash
fuente
Si desea hacer una nueva pregunta, hágalo como una pregunta separada. Cómo preguntar
Aditya
0

¿Por qué estoy respondiendo esta pregunta?

Hay muy buenas respuestas, pero todo está escrito usando init o upstart. A partir de ahora usaremos systemd, estoy escribiendo un mejor script e información. sobre cómo hacer eso.

¿Pero hay alguna manera?

Es decir, hay un camino. Solo necesita crear un script que monitoree el estado de su red y reinicie Network Manager a pedido. Construiremos este script y un servicio systemd que se iniciará con el sistema y supervisará el estado de su red cada 5 segundos para determinar si está conectado o no.

¿Qué tengo que hacer?

En primer lugar, necesitamos instalar la herramienta fping para realizar una de las pruebas de conexión (fping return "está vivo" si es posible una conexión y "dirección no encontrada" si no):

$ sudo apt-get install fping -y

Ahora crearemos el script de monitor en nuestro sistema. Cree un archivo en / usr / local / bin / llamado nm-watcher:

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

Y edítelo usando nano o su editor de texto preferido:

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

Copie y pegue este script dentro del editor, guarde y cierre el archivo (si está usando nano, como en este tutorial, use "CTRL + X", "Y" y "ENTER" en secuencia). No olvide cambiar wlan0 a la interfaz que desea que wm-watcher monitoree:

#!/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 ejecutar este script, debemos hacerlo ejecutable:

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

Ahora, crearemos el servicio SystemD, para esto, debe crear y editar el archivo nm-watcher.service en / etc / systemd / system /:

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

Y ponga este contenido dentro del archivo:

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

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

[Install]
WantedBy=multi-user.target

Esto creará el archivo de servicio que hará que SystemD llame al script que hemos creado antes en cada arranque, después de haber establecido una conexión usando network-manager.service.

Deberíamos saber habilitar este servicio para que se ejecute usando:

$ sudo systemctl enable nm-watcher.service

Y comience el servicio escribiendo:

$ sudo service nm-watcher start

Para verificar si el servicio se está ejecutando, escriba:

$ sudo service nm-watcher status

Si tiene algún problema con el servicio, puede ver los mensajes de depuración utilizando:

$ sudo journalctl -u nm-watcher

¿Debo hacer alguna otra cosa?

No, esto es todo lo que se necesita para lograr esta tarea. Este script tiene un impacto muy bajo en el rendimiento del sistema, como puede ver en esta captura de pantalla:

huella de nm-watcher

Alexandre Teles
fuente
0

En mi computadora portátil anterior tenía una tarjeta WiFi defectuosa que tenía tendencia a desconectarse de WiFi si había mucha carga (por ejemplo, descargar archivos grandes, etc.).

Creé un script simple para verificar si mi Internet todavía estaba conectado, y si no lo estaba, reinicie el administrador de red.

#!/bin/bash

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

Creé un cronjob raíz con sudo crontab -e y lo configuré de modo que cada minuto (puede hacerlo con menos frecuencia, pero el script es un simple ping, por lo que no requiere muchos recursos) ejecutaría el script.

Entonces, si mi WiFi se apagó por alguna razón, solo estaría fuera por aproximadamente un minuto a la vez, como máximo. Si no está familiarizado cron, le recomiendo leer esto

Try431
fuente