Neustart von Network Manager nach Verbindungsabbruch durchführen?

18

Verwenden von Ubuntu 11.10 (Unity 3D) und einer Kabel-Internetverbindung (DSL) ohne Router oder Modem.

Wenn ich meine Internetverbindung trenne, kann ich einfach die Verbindung wiederherstellen, indem ich auf das Netzwerkmanagersymbol klicke und eine Verbindung aus dem Dropdown-Menü auswähle, da meine Verbindungen sichtbar sind. Der Netzwerkmanager muss nicht neu gestartet werden.

Aber wenn die Internetverbindung von selbst unterbrochen wird , habe ich ein Terminal geöffnet und verwende es, sudo service network-manager restartda im Dropdown-Menü des Netzwerkmanagers keine Verbindung angezeigt wird. Erst nach dem Befehl startet der Netzwerkmanager und stellt automatisch eine Verbindung her.

Gibt es eine Einstellung, damit der Netzwerkmanager nicht jedes Mal neu gestartet werden muss, wenn die Verbindung getrennt wird (im Gegensatz zu meiner Trennung, wenn kein Neustart erforderlich ist)?

Mit anderen Worten, ich möchte nicht, dass der Netzwerkmanager stoppt, solange ich den Computer benutze, unabhängig davon, ob meine Verbindung zum ISP unterbrochen wurde oder nicht.

Es ist keine große Sache, ein Terminal zu öffnen und den Befehl und das Kennwort einzugeben. Wenn Sie jedoch sicherstellen können, dass der Netzwerkmanager nicht aufhört, ist dies besser.

editiert vom 26.01.2012: Zeilen aus 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

Bildbeschreibung hier eingeben


quelle
Bitte probieren Sie diese beiden Lösungen aus: (1) forums.fedoraforum.org/showthread.php?t=229718#2 (2) platonic.techfiz.info/2009/07/28/… - Leider habe ich kein mobiles Breitband Verbindung, um sie auszuprobieren.
Savvas Radevic
@medigeek, auch ich habe keine Mobilfunkverbindung. Es handelt sich um eine DSL-Verbindung (kabelgebunden): Ein Kabel, das an eine Telefonsteckdose angeschlossen wird. Es ist kein Router oder Modem zwischengeschaltet.
@ vasa1 Trennen Sie Ihre DSL-Verbindung und geben Sie diesen Befehl im Terminal aus. nmcli con up id "DSL connection 1". Ich habe kein DSL, deshalb brauche ich Ihre Hilfe bei allen Befehlen und Ausgaben. Kommentieren Sie Ihre Ausgabe aus.
Rahul Virpara
Ausgabe geben:nmcli -t -f TYPE,STATE dev
Rahul Virpara

Antworten:

16

Hier ist ein Upstart-Skript, das Sie platzieren können /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

Wenn Sie eine IP-Adresse für eth0 verlieren (konfigurieren Sie diese gegebenenfalls für Ihre Schnittstelle), wird der Netzwerkmanager-Job neu gestartet und die Konnektivität wiederhergestellt.

Tuminoid
quelle
Das ist alles neu für mich, deshalb schätze ich das Händchenhalten. Mache ich eine Textdatei mit dem Namen reconnect.conf und lege sie mit der Berechtigung "root" in / etc / init ab? Benutze ich den Text Wort für Wort? In meinen "Active Network Connections" sehe ich "Interface: Ethernet (eth0)". Mein Verbindungsname ist "vasa1". Lasse ich "inet addr:" unverändert oder muss ich einen Wert eingeben? Weiß Ubuntu, dass diese Datei gelesen werden muss? Oder muss ich etwas tun?
1
Tun Sie genau so, wie Sie gesagt haben, als root eine Datei reconnect.confzu erstellen, die aufgerufen wird /etc/init. Sie müssen nur eth0 in etwas anderes ändern, wenn es nicht korrekt ist. inet addr:teil ist nur ein filter für grep und sollte nicht angerührt werden. Relevante Verbindungsnamen können über überprüft werden ifconfig. Upstart liest diese Datei automatisch und Sie sollten dies tun sudo start reconnect, um den Job in Gang zu bringen. Beim nächsten Neustart wird es automatisch gestartet.
Tuminoid
Die erste Zeile von ifconfigbeginnt mit, ethoalso werde ich das verwenden und dann, sudo start reconnectwenn die Verbindung unterbrochen wird. Ich werde mit dem Ergebnis zurück posten. Vielen Dank!
Ich habe erstellt /etc/init/reconnect.confund neu gestartet. Als meine Verbindung einige Zeit nach dem Neustart unterbrochen wurde, wurde nm nicht neu gestartet. Also habe ich ausgestellt sudo start reconnect. reconnect stop/waitingwar die Antwort, aber nm nicht neu gestartet. Ich musste sudo service network-manager restartdas tun, was ich normalerweise tue. Wäre stattdessen restart network-manageretwas restart service network-managererforderlich? (Übrigens habe ich eth0 und nicht etho gesetzt (anders als in meinem vorherigen Kommentar))
Auf meinem System ist der Netzwerk-Manager ein Start-Job für den nm, und die oben genannten Befehle funktionieren einwandfrei für mich. Sie können den Neustart-Befehl jedoch jederzeit in einen beliebigen in Ihrem System funktionierenden Befehl ändern, z service network-manager restart. Nur neugierig, was ist die Ausgabe status network-managerauf Ihrem System? Wenn dies stop/waitingnach dem Neustart besagt (oder einen Fehler anzeigt), müssen Sie start auf so etwas wie ändern start on runlevel [2345]und sleep 60vor while hinzufügen .
Tuminoid
2

Eine schnelle und schmutzige Umgehung besteht darin, ein Skript zu schreiben, das ping -i 5 google.com || service network-manager restartals root ausgeführt wird (Sie könnten dafür einen /etc/init.d/-daemon schreiben, aber da die Lösung SEHR schmutzig ist, würde ich das nicht tun).

Dieses Skript startet den Netzwerkmanager jedes Mal neu, wenn Google nicht gefunden wird, und überprüft ihn alle fünf Sekunden.

Sakjur
quelle
Ich habe dafür gestimmt, obwohl ich die Lösung nicht verstehe, weil ich noch nie ein Drehbuch geschrieben habe. Könnten Sie bitte schrittweise Einzelheiten erläutern?
Ich lese ein bisschen und möchte wissen, ob es in Ordnung ist, eine Site wiederholt anzupingen. Ich habe den Eindruck, dass Ping hauptsächlich zur Fehlersuche verwendet wird.
1
Wahrscheinlich nicht, das ist einer der Gründe, warum es schmutzig ist;) Versuchen Sie, die Tuminoids-Lösung ein bisschen zu verwenden. Das funktioniert nicht, wenn die DNS-Server störend sind, aber in den meisten Fällen sollte es funktionieren!
Sakjur
Ich bin ein ziemlicher Neuling und habe nicht verstanden, was DIRTY in deiner Antwort ist.
kernel_panic
1
Grundsätzlich funktioniert dies, indem alle fünf Sekunden eine Anfrage an Google gesendet wird und der Netzwerkmanager neu gestartet wird, wenn Sie Google nicht erreichen können. Es ist schmutzig, weil es kein guter Weg ist, es ist kein effektiver Weg, und Sie könnten einen Sysadmin dazu bringen, Ihre IP-Adresse irgendwo zu blockieren;) (Ich denke, Google würde das nicht tun, aber es ist nicht sehr nett sowieso)
Stellen
2

Versuchen Sie es mit wicd anstelle von network-manager. In einem ähnlichen Fall wird dies empfohlen: https://bbs.archlinux.org/viewtopic.php?id=124443

Ich weiß nicht, ob es das Problem beheben wird oder ob wicd pppoe unterstützt.

  1. Sichern Sie die .deb-Dateien, nur für den Fall:

    sudo apt-get download network-manager network-manager-gnome
    
  2. Bereinigen Sie den Netzwerkmanager und installieren Sie wicd

    sudo apt-get purge network-manager network-manager-gnome
    sudo apt-get install wicd wicd-gtk
    
  3. Starten Sie neu. Versuchen Sie, eine Verbindung mit wicd herzustellen.

Wenn etwas schief geht, einfach wicd löschen und den Netzwerkmanager neu installieren:

sudo apt-get purge wicd wicd-gtk
sudo dpkg -i network-manager*.deb
Savvas Radevic
quelle
Vielen Dank, Medigeek! Drei Punkte. Erstens ist das OP im Archlinux-Fall nicht zurückgekommen, um zu posten, ob der Wechsel zu wicd das Problem gelöst hat. Zweitens zögere ich, obwohl dies eine Unannehmlichkeit ist, von der Standardeinstellung abzuweichen. Im Moment verwende ich diesen Alias: alias nm='echo "password" | sudo -S service network-manager restart'als Problemumgehung. Drittens haben Ihre anderen hilfreichen Links den Anschein, dass das Problem nichts mit Ubuntu zu tun hat, sondern "upstream" ist, und deshalb werde ich fragen, ob diese Frage geschlossen werden sollte.
1
Richtig für den ersten Punkt, ich sollte die Antwort wahrscheinlich löschen, da die wicd- FAQ-Seite angibt, dass pppoe erst mit der wicd-Version 2.0 unterstützt wird. Für Punkt 3 könnten Sie versuchen, einen Fehler direkt im Upstream (PPPD oder Netzwerk-Manager?)
Savvas Radevic
Ich habe mich dem von Ihnen bereitgestellten Launchpad-Bug hinzugefügt.
0

Ich habe ein Skript für dieses Problem erstellt:

#!/bin/bash

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

Das funktioniert gut, aber dieses Skript beansprucht zu viel CPU. Kann mir jemand helfen, die CPU-Auslastung zu senken?

Jyoti Prakash
quelle
Wenn Sie eine neue Frage stellen möchten, stellen Sie sie stattdessen als separate Frage. How to Ask
Aditya
0

Warum beantworte ich diese Frage?

Es gibt sehr gute Antworten, aber alles wird mit init oder upstart geschrieben. Ab sofort verwenden wir systemd, ich schreibe ein besseres Skript und Informationen. wie das geht.

Aber gibt es einen Weg?

Es gibt einen Weg. Sie müssen lediglich ein Skript erstellen, das Ihren Netzwerkstatus überwacht, und Network Manager bei Bedarf neu starten. Wir werden dieses Skript und einen systemd-Dienst erstellen, der mit dem System gestartet wird und Ihren Netzwerkstatus alle 5 Sekunden überwacht, um festzustellen, ob Sie online sind oder nicht.

Was soll ich machen?

Zunächst müssen wir das fping-Tool installieren, um einen der Verbindungstests durchzuführen (fping return "lebt", wenn eine Verbindung möglich ist, und "address not found", wenn nicht):

$ sudo apt-get install fping -y

Jetzt erstellen wir das Monitor-Skript auf unserem System. Erstellen Sie eine Datei unter / usr / local / bin / mit dem Namen nm-watcher:

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

Und bearbeiten Sie es mit Nano oder Ihrem bevorzugten Texteditor:

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

Kopieren Sie dieses Skript und fügen Sie es in den Editor ein. Speichern und schließen Sie die Datei (wenn Sie nano verwenden, wie in diesem Tutorial, drücken Sie nacheinander "STRG + X" "Y" und "EINGABE"). Vergessen Sie nicht, wlan0 auf die Schnittstelle zu ändern, die wm-watcher überwachen soll:

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

Um dieses Skript auszuführen, müssen wir es ausführbar machen:

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

Jetzt erstellen wir den SystemD-Dienst. Dazu müssen Sie die Datei nm-watcher.service unter / etc / systemd / system / erstellen und bearbeiten:

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

Und fügen Sie diesen Inhalt in die Datei ein:

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

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

[Install]
WantedBy=multi-user.target

Dadurch wird die Servicedatei erstellt, die bewirkt, dass SystemD das zuvor erstellte Skript bei jedem Start aufruft, nachdem eine Verbindung mit network-manager.service hergestellt wurde.

Wir sollten wissen, dass dieser Dienst ausgeführt werden kann mit:

$ sudo systemctl enable nm-watcher.service

Und starten Sie den Dienst, indem Sie Folgendes eingeben:

$ sudo service nm-watcher start

So überprüfen Sie, ob der Dienst ausgeführt wird:

$ sudo service nm-watcher status

Wenn Sie Probleme mit dem Dienst haben, können Sie die Debug-Meldungen folgendermaßen anzeigen:

$ sudo journalctl -u nm-watcher

Soll ich etwas anderes machen?

Nein, das ist alles, was benötigt wird, um diese Aufgabe zu erfüllen. Dieses Skript hat sehr geringe Auswirkungen auf die Systemleistung, wie Sie auf diesem Screenshot sehen können:

nm-watcher Fußabdruck

Alexandre Teles
quelle
0

Auf meinem älteren Laptop hatte ich eine schlechte WLAN-Karte, die dazu neigte, sich vom WLAN zu trennen, wenn viel geladen war (z. B. Herunterladen großer Dateien usw.).

Ich habe ein einfaches Skript erstellt, um zu überprüfen, ob noch eine Internetverbindung besteht. Wenn dies nicht der Fall ist, starten Sie den Netzwerkmanager neu.

#!/bin/bash

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

Ich habe einen Root-Cronjob mit erstellt sudo crontab -eund diesen so eingestellt, dass er jede Minute ausgeführt wird (Sie können dies weniger häufig tun, aber das Skript ist ein einfacher Ping- Befehl , sodass es nicht ressourcenintensiv ist).

Also, wenn mein WiFi aus irgendeinem Grund ausgehen würde, würde es immer nur für ungefähr eine Minute auf einmal ausgehen, ganz oben. Wenn Sie nicht vertraut sind cron, empfehle ich, dies zu lesen

Try431
quelle