Riavvio di Network Manager dopo l'interruzione della connessione?


18

Utilizzando Ubuntu 11.10 (Unity 3D) e una connessione Internet via cavo (DSL) senza router o modem.

Se io stacco la mia connessione internet, posso solo ricollegare cliccando sul gestore icona di rete e la selezione di una connessione dal menu a tendina in quanto i miei collegamenti sono visibili. Non è necessario riavviare il gestore di rete.

Ma ogni volta che la connessione a Internet si interrompe da sola , ho aperto un terminale e utilizzo sudo service network-manager restartpoiché non vedo alcuna connessione nel menu a discesa del gestore della rete. Solo dopo il comando, Network Manager si avvia e si connette automaticamente.

C'è qualche impostazione in modo che il gestore della rete non debba essere riavviato ogni volta che la connessione si interrompe (al contrario della mia disconnessione quando non è necessario un riavvio)?

In altre parole, non voglio che il gestore della rete si fermi finché sto usando il computer, indipendentemente dal fatto che la mia connessione all'ISP sia caduta o meno.

Non è un grosso problema aprire un terminale e digitare il comando e la password, ma se c'è un modo per assicurarsi che il gestore della rete non si fermi sarebbe meglio.

modifica datata 26 gennaio 2012: Lines from 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

inserisci qui la descrizione dell'immagine



Prova queste due soluzioni: (1) forums.fedoraforum.org/showthread.php?t=229718#2 (2) platonic.techfiz.info/2009/07/28/… - Purtroppo non ho una banda larga mobile connessione per provarli.
Savvas Radevic,

@medigeek, anche io non ho una connessione mobile. È una connessione DSL (cablata): un cavo che si collega a una presa del tipo di telefono. Non ci sono router o modem intervenuti alla mia estremità.

@ vasa1 disconnetti la tua connessione DSL ed emetti questo comando nel terminale. nmcli con up id "DSL connection 1". Non ho DSL quindi ho bisogno del tuo aiuto con tutti i comandi e gli output. Commenta la tua uscita.
Rahul Virpara,

dare uscita:nmcli -t -f TYPE,STATE dev
Rahul Virpara,

Risposte:


16

Ecco uno script Upstart che puoi inserire /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

In caso di perdita di un indirizzo IP per eth0 (configurare l'interfaccia se diversa), riavvia il lavoro del gestore di rete e ripristina la connettività.


Questo è tutto nuovo per me, quindi apprezzerò tenere la mano. Devo creare un file di testo chiamato reconnect.conf e inserirlo in / etc / init con l'autorizzazione "root"? Uso il testo parola per parola? Nelle mie "Connessioni di rete attive" vedo "Interfaccia: Ethernet (eth0)". Il mio nome di connessione è "vasa1". Lascio "inet addr:" come è o devo inserire un valore? Ubuntu saprà che questo file deve essere letto? O devo fare qualcosa?

1
Fare proprio come hai detto, come root rendere un file chiamato reconnect.confa /etc/init. L'unica cosa che devi cambiare è eth0 in qualcos'altro se non è corretto. inet addr:parte è solo un filtro per grep e non deve essere toccato. Il nome della connessione pertinente può essere verificato tramite ifconfig. Upstart leggerà questo file automaticamente e dovresti fare sudo start reconnectper avviare il lavoro. Al successivo riavvio si avvierà automaticamente.
Tuminoide,

La prima riga ifconfiginizia con, ethoquindi lo userò e poi sudo start reconnectquando la connessione cadrà . Riporterò indietro con il risultato. Grazie!

Ho creato /etc/init/reconnect.confe riavviato. Quando la mia connessione è caduta qualche tempo dopo il riavvio, nm non si è riavviato. Quindi ho emesso sudo start reconnect. reconnect stop/waitingfu la risposta ma nm non si riavviò. Dovevo fare sudo service network-manager restartquello che faccio normalmente. Invece di restart network-manager, sarebbe necessario qualcosa di simile restart service network-manager? (A proposito, ho messo eth0 e non etho (a differenza di quello che c'è nel mio commento precedente))

Sul mio sistema il gestore della rete è un lavoro di avvio per l'nm e i comandi sopra funzionano bene per me, ma sentiti libero di cambiare il comando di riavvio in qualsiasi cosa funzioni nel tuo sistema, come ad esempio service network-manager restart. Solo curioso, qual è l'output del status network-managertuo sistema? Se questo dice stop/waiting(o dà un errore) dopo il riavvio, è necessario cambiare iniziare su qualcosa di simile start on runlevel [2345]e aggiungere sleep 60prima mentre.
Tuminoide,

2

Una soluzione rapida e sporca è scrivere uno script che funziona ping -i 5 google.com || service network-manager restartcome root (potresti scrivere un /etc/init.d/-daemon per quello, ma poiché la soluzione è MOLTO sporca, non lo farei)

Tale script riavvierebbe il gestore della rete ogni volta che Google non viene trovato e controlla una volta al quinto secondo.


Ho votato a favore anche se non capisco la soluzione perché non ho mai scritto una sceneggiatura prima. Potresti fornire dettagli dettagliati?

Sto leggendo un po 'e voglio sapere se va bene fare ripetutamente il ping su un sito. Ho l'impressione che il ping sia usato principalmente per la risoluzione dei problemi.

1
Probabilmente no, questo è uno dei motivi per cui è sporco;) prova a usare la soluzione Tuminoids un po 'su, che non funziona se i server DNS sono problematici, ma dovrebbe funzionare nella maggior parte dei casi!
Sakjur,

Sono abbastanza un novizio e non ho trovato quello SPORCO nella tua risposta ..
kernel_panic

1
Fondamentalmente, funziona inviando una richiesta a Google una volta ogni quinto secondo e riavvia il gestore della rete se non riesci a raggiungere Google. È sporco perché non è un buon modo per farlo, non è un modo efficace per farlo e potresti semplicemente fare in modo che un amministratore di sistema da qualche parte blocchi il tuo indirizzo IP;) (Non penso che Google lo farebbe, ma non è molto bello comunque) Pensalo come seduto e frugando una persona per vedere se sei ancora vivo;)
sakjur

2

Prova wicd invece di network manager, è stato consigliato per un caso simile: https://bbs.archlinux.org/viewtopic.php?id=124443

Non so se risolverà il problema né se Wicd supporta Pppoe.

  1. Eseguire il backup dei file .deb, nel caso in cui:

    sudo apt-get download network-manager network-manager-gnome
    
  2. Elimina il gestore di rete e installa wicd

    sudo apt-get purge network-manager network-manager-gnome
    sudo apt-get install wicd wicd-gtk
    
  3. Reboot. Prova a connetterti utilizzando Wicd.

Se qualcosa va storto, basta eliminare wicd e reinstallare il gestore di rete:

sudo apt-get purge wicd wicd-gtk
sudo dpkg -i network-manager*.deb

Grazie mille, medigeek! Tre punti. Uno, nel caso di archlinux, l'OP non è tornato a pubblicare se la modifica a wicd ha risolto il problema. In secondo luogo, mentre è un inconveniente, sono titubante a cambiare rispetto all'impostazione predefinita. Per ora, sto usando questo alias: alias nm='echo "password" | sudo -S service network-manager restart'come soluzione alternativa. In terzo luogo, dai tuoi altri link utili, sembra che il problema non abbia nulla a che fare con Ubuntu ma è "a monte" e quindi chiederò se questa domanda debba essere chiusa.

1
Vero per il 1 ° punto, dovrei probabilmente eliminare la risposta, poiché la pagina FAQ di wicd dice che non supporterà pppoe fino alla versione 2.0 di wicd. Per il punto 3, potresti provare a presentare un bug direttamente a monte (pppd o gestore di rete?)
Savvas Radevic,

Mi sono aggiunto al bug del launchpad che hai fornito.

0

Ho creato uno script per questo 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

Funziona bene, ma questo script sta prendendo troppo della mia CPU. Qualcuno può aiutarmi a ridurre l'utilizzo della CPU?


Se vuoi fare una nuova domanda, chiedila invece come separata. Come chiedere
Aditya,

0

Perché sto rispondendo a questa domanda?

Ci sono ottime risposte, ma tutto è scritto usando init o upstart. Da adesso useremo systemd, sto scrivendo uno script e informazioni migliori. su come farlo.

Ma c'è un modo?

È, c'è un modo. Devi solo creare uno script che controlli lo stato della tua rete e riavviare Network Manager su richiesta. Costruiremo questo script e un servizio systemd che verrà avviato con il sistema e monitoreremo lo stato della tua rete ogni 5 secondi per scoprire se sei online o meno.

Cosa dovrei fare?

Prima di tutto, dobbiamo installare lo strumento fping per eseguire uno dei test di connessione (fping return "è attivo" se è possibile una connessione e "indirizzo non trovato" in caso contrario):

$ sudo apt-get install fping -y

Ora creeremo lo script monitor sul nostro sistema. Crea un file su / usr / local / bin / chiamato nm-watcher:

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

E modificalo usando nano o il tuo editor di testo preferito:

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

Copia e incolla questo script all'interno dell'editor, salva e chiudi il file (se stai usando nano, come in questo tutorial, usa "CTRL + X" "Y" e "ENTER" in sequenza). Non dimenticare di cambiare wlan0 nell'interfaccia che vuoi che wm-watcher controlli:

#!/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

Per eseguire questo script dobbiamo renderlo eseguibile:

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

Ora creeremo il servizio SystemD, per questo, dovresti creare e modificare il file nm-watcher.service in / etc / systemd / system /:

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

E metti questo contenuto nel file:

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

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

[Install]
WantedBy=multi-user.target

Questo creerà il file di servizio che induce SystemD a chiamare lo script che abbiamo creato in precedenza ad ogni avvio, dopo aver stabilito una connessione utilizzando network-manager.service.

Dovremmo sapere abilitare questo servizio per l'esecuzione usando:

$ sudo systemctl enable nm-watcher.service

E avvia il servizio digitando:

$ sudo service nm-watcher start

Per verificare se il servizio è in esecuzione digitare:

$ sudo service nm-watcher status

In caso di problemi con il servizio, è possibile visualizzare i messaggi di debug utilizzando:

$ sudo journalctl -u nm-watcher

Dovrei fare altre cose?

No, questo è tutto ciò che è necessario per svolgere questo compito. Questo script ha un impatto molto basso sulle prestazioni del sistema, come puoi vedere in questo screenshot:

impronta nm-watcher


0

Sul mio portatile più vecchio avevo una brutta scheda WiFi che tendeva a disconnettersi dal WiFi se c'era molto carico (ad esempio, scaricare file di grandi dimensioni, ecc.).

Ho creato un semplice script per verificare se la mia Internet era ancora connessa e, in caso contrario, riavviare il gestore della rete.

#!/bin/bash

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

Ho creato un cronjob con root sudo crontab -ee lo ho impostato in modo tale che ogni minuto (è possibile farlo più frequentemente, ma lo script è un semplice ping quindi non richiede molte risorse) eseguirà lo script.

Quindi, se il mio WiFi si spegnesse per qualche motivo, sarebbe solo fuori per circa un minuto alla volta, al massimo. Se non hai familiarità cron, ti consiglio di leggere questo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.