Czy zrestartować Network Managera po zerwaniu połączenia?

18

Korzystanie z Ubuntu 11.10 (Unity 3D) i kablowego (DSL) połączenia internetowego bez routera lub modemu.

Jeśli ja odłączeniu połączenia internetowego, mogę po prostu podłączyć klikając na ikonę menedżera sieci i wybierając połączenie z rozwijanego menu ponieważ moje połączenia są widoczne. Nie ma potrzeby restartowania menedżera sieci.

Ale ilekroć połączenie internetowe samo się zrywa , otwieram terminal i używam go, sudo service network-manager restartponieważ nie widzę żadnego połączenia w rozwijanym menu menedżera sieci. Dopiero po wydaniu polecenia menedżer sieci uruchamia się i automatycznie łączy.

Czy jest jakieś ustawienie, aby menedżer sieci nie musiał być ponownie uruchamiany za każdym razem, gdy połączenie zostanie zerwane (w przeciwieństwie do mojego rozłączania, gdy nie trzeba go ponownie uruchamiać)?

Innymi słowy, nie chcę, aby menedżer sieci zatrzymywał się, dopóki korzystam z komputera, niezależnie od tego, czy moje połączenie z usługodawcą internetowym zostało przerwane, czy nie.

Otwarcie terminala i wpisanie polecenia i hasła nie jest niczym wielkim, ale jeśli istnieje sposób na to, aby menedżer sieci się nie zatrzymał, byłoby lepiej.

edytuj z 26 stycznia 2012: Linie z 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

wprowadź opis zdjęcia tutaj


źródło
Wypróbuj te dwa rozwiązania: (1) forums.fedoraforum.org/showthread.php?t=229718#2 (2) platonic.techfiz.info/2009/07/28/... - Niestety nie mam mobilnego łącza szerokopasmowego połączenie, aby je wypróbować.
Savvas Radevic
@medigeek, nawet ja nie mam połączenia mobilnego. To połączenie DSL (przewodowe): kabel, który podłącza się do gniazda telefonicznego. Na moim końcu nie ma routera ani modemu.
@ vasa1 rozłącz połączenie DSL i wydaj to polecenie w terminalu. nmcli con up id "DSL connection 1". Nie mam DSL, więc potrzebuję twojej pomocy ze wszystkimi poleceniami i danymi wyjściowymi. Skomentuj swoje wyniki.
Rahul Virpara
dać wynik:nmcli -t -f TYPE,STATE dev
Rahul Virpara

Odpowiedzi:

16

Oto skrypt Upstart, który możesz umieścić /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

Po utracie adresu IP dla eth0 (skonfiguruj interfejs, jeśli jest inny), zrestartuje zadanie menedżera sieci i przywróci połączenie.

Tuminoid
źródło
To dla mnie zupełnie nowe, więc docenię trzymanie za rękę. Czy tworzę plik tekstowy o nazwie reconnect.conf i umieszczam go w / etc / init z uprawnieniem „root”? Czy używam słowa słowo w słowo? W „Aktywnych połączeniach sieciowych” widzę „Interfejs: Ethernet (eth0)”. Moje połączenie to „vasa1”. Czy pozostawiam „inet addr:” w stanie, w jakim jest, czy muszę wprowadzać jakąś wartość? Czy Ubuntu będzie wiedział, że ten plik należy odczytać? Czy muszę coś zrobić?
1
Rób tak, jak powiedziałeś, ponieważ root tworzy plik wywoływany reconnect.confdo /etc/init. Jedyne, co musisz zmienić, to eth0 na coś innego, jeśli nie jest poprawne. inet addr:część jest tylko filtrem grep i nie należy jej dotykać. Odpowiednią nazwę połączenia można sprawdzić za pośrednictwem ifconfig. Upstart automatycznie odczyta ten plik i powinieneś zrobić, sudo start reconnectaby rozpocząć pracę. Przy następnym uruchomieniu uruchomi się automatycznie.
Tuminoid
Pierwsza linia ifconfigzaczyna się od, ethowięc użyję tego, a potem, sudo start reconnectgdy połączenie się zerwie. Wyślę z powrotem z wynikiem. Dzięki!
Utworzyłem /etc/init/reconnect.confi uruchomiłem ponownie. Kiedy moje połączenie zostało przerwane jakiś czas po restarcie, nm nie uruchomił się ponownie. Więc wydałem sudo start reconnect. reconnect stop/waitingbyła odpowiedź, ale nm nie uruchomił się ponownie. Musiałem do sudo service network-manager restarttego, co zwykle robię. Czy zamiast tego restart network-managerbyłoby coś takiego restart service network-manager? (BTW, wprowadziłem eth0, a nie etho (w przeciwieństwie do tego, co jest w moim poprzednim komentarzu))
W moim systemie menadżer sieci to zadanie wstępne dla nm i powyższe polecenia działają dobrze dla mnie, ale możesz zmienić polecenie restartu na cokolwiek, co działa w twoim systemie, np service network-manager restart. Ciekawe, jaka jest wydajność status network-managertwojego systemu? Jeśli to mówi stop/waiting(lub daje błąd) po ponownym uruchomieniu, musisz zmienić start na coś takiego jak start on runlevel [2345]i dodać sleep 60wcześniej.
Tuminoid,
2

Szybkie i nieprzyzwoite obejście polega na napisaniu skryptu działającego ping -i 5 google.com || service network-manager restartjako root (możesz do tego napisać /etc/init.d/-daemon, ale ponieważ rozwiązanie jest BARDZO brudne, nie zrobiłbym tego)

Ten skrypt uruchamiał ponownie menedżera sieci za każdym razem, gdy Google nie zostanie znaleziony, i sprawdza co pięć sekund.

sakjur
źródło
Głosowałem za tym, mimo że nie rozumiem rozwiązania, ponieważ nigdy wcześniej nie napisałem scenariusza. Czy możesz podać szczegółowe informacje?
Czytam trochę i chcę wiedzieć, czy wielokrotne pingowanie witryny jest w porządku. Mam wrażenie, że ping służy przede wszystkim do rozwiązywania problemów.
1
Prawdopodobnie nie, to jeden z powodów, dla których jest brudny;) spróbuj użyć nieco rozwiązania Tuminoids, które nie działa, jeśli serwery DNS są kłopotliwe, ale powinno działać w większości przypadków!
sakjur
Jestem całkiem nowicjuszem i nie dostałem, co jest BRUDNE w twojej odpowiedzi ..
kernel_panic
1
Zasadniczo działa, wysyłając żądanie do Google co pięć sekund i ponownie uruchom menedżera sieci, jeśli nie możesz skontaktować się z Google. Jest brudny, ponieważ nie jest to dobry sposób, aby to zrobić, nie jest to skuteczny sposób, a możesz po prostu sprawić, by sysadmin gdzieś blokował twój adres IP;) (Nie sądzę, że Google by to zrobił, ale to nie jest bardzo i tak miło) Pomyśl o tym jak o siedzeniu i szturchaniu osoby, żeby zobaczyć, czy jeszcze żyjesz;)
sakjur
2

Spróbuj wicd zamiast menedżera sieci, jest to zalecane w podobnym przypadku: https://bbs.archlinux.org/viewtopic.php?id=124443

Nie wiem, czy to rozwiąże problem, czy wicd obsługuje pppoe.

  1. Utwórz kopię zapasową plików .deb na wszelki wypadek:

    sudo apt-get download network-manager network-manager-gnome
    
  2. Oczyść menedżera sieci i zainstaluj WICD

    sudo apt-get purge network-manager network-manager-gnome
    sudo apt-get install wicd wicd-gtk
    
  3. Restart. Spróbuj połączyć się za pomocą WICD.

Jeśli coś pójdzie nie tak, po prostu wyczyść WICD i zainstaluj ponownie menedżera sieci:

sudo apt-get purge wicd wicd-gtk
sudo dpkg -i network-manager*.deb
Savvas Radevic
źródło
Wielkie dzięki, medigeek! Trzy punkty. Po pierwsze, w przypadku archlinuxa OP nie powrócił, aby opublikować informację, czy zmiana wicd rozwiązała problem. Po drugie, chociaż jest to niedogodność, waham się przed zmianą wartości domyślnej. Na razie używam tego aliasu: alias nm='echo "password" | sudo -S service network-manager restart'jako obejścia. Po trzecie, z twoich innych pomocnych linków wynika, że ​​problem nie ma nic wspólnego z Ubuntu, ale jest „upstream”, więc zapytam, czy to pytanie powinno zostać zamknięte.
1
To prawda, jeśli chodzi o 1. punkt, prawdopodobnie powinienem usunąć odpowiedź, ponieważ strona FAQ wicd mówi, że nie będzie obsługiwał pppoe, dopóki wicd wersja 2.0. W przypadku punktu # 3 możesz spróbować
zgłosić
Dodałem się do błędu startera, który podałeś.
0

Stworzyłem skrypt dla tego problemu:

#!/bin/bash

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

Działa to dobrze, ale ten skrypt zajmuje zbyt dużo mojego procesora. Czy ktoś może mi pomóc w zmniejszeniu zużycia procesora?

Jyoti Prakash
źródło
Jeśli chcesz zadać nowe pytanie, zadaj je osobno. Jak zapytać
Aditya,
0

Dlaczego odpowiadam na to pytanie?

Są to bardzo dobre odpowiedzi, ale wszystko jest napisane przy użyciu init lub upstart. Od teraz będziemy używać systemd, piszę lepszy skrypt i informacje. jak to zrobić.

Ale czy jest jakiś sposób?

Jest sposób. Wystarczy utworzyć skrypt monitorujący stan sieci i ponownie uruchomić Menedżera sieci na żądanie. Zbudujemy ten skrypt i usługę systemową, która zostanie uruchomiona wraz z systemem i będziemy monitorować stan sieci co 5 sekund, aby sprawdzić, czy jesteś online, czy nie.

Co powinienem zrobić?

Przede wszystkim musimy zainstalować narzędzie fping, wykonać jeden z testów połączenia (powrót fping „żyje”, jeśli połączenie jest możliwe, a „nie znaleziono adresu”, jeśli nie):

$ sudo apt-get install fping -y

Teraz utworzymy skrypt monitorowania w naszym systemie. Utwórz plik w / usr / local / bin / o nazwie nm-watcher:

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

I edytuj go za pomocą nano lub preferowanego edytora tekstu:

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

Skopiuj i wklej ten skrypt w edytorze, zapisz i zamknij plik (jeśli używasz nano, podobnie jak w tym samouczku, użyj kolejno „CTRL + X”, „Y” i „ENTER”). Nie zapomnij zmienić wlan0 na interfejs, który chcesz monitorować wm-watcher:

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

Aby uruchomić ten skrypt, musimy go wykonać:

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

Teraz stworzymy usługę SystemD, w tym celu należy utworzyć i edytować plik nm-watcher.service w / etc / systemd / system /:

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

I umieść tę zawartość w pliku:

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

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

[Install]
WantedBy=multi-user.target

Spowoduje to utworzenie pliku usługi, który spowoduje, że SystemD wywoła skrypt, który utworzyliśmy przed każdym uruchomieniem, po ustanowieniu połączenia za pomocą network-manager.service.

Powinniśmy wiedzieć, aby umożliwić uruchomienie tej usługi przy użyciu:

$ sudo systemctl enable nm-watcher.service

I uruchom usługę, wpisując:

$ sudo service nm-watcher start

Aby sprawdzić, czy usługa jest uruchomiona, wpisz:

$ sudo service nm-watcher status

Jeśli masz jakiekolwiek problemy z usługą, możesz zobaczyć komunikaty debugowania za pomocą:

$ sudo journalctl -u nm-watcher

Czy powinienem robić inne rzeczy?

Nie, to wszystko, co jest potrzebne do wykonania tego zadania. Ten skrypt ma bardzo niewielki wpływ na wydajność systemu, jak widać na tym zrzucie ekranu:

ślad nm-watchera

Alexandre Teles
źródło
0

Na moim starszym laptopie miałem złą kartę WiFi, która miała tendencję do rozłączania się z Wi-Fi, jeśli było dużo obciążenia (np. Pobieranie dużych plików itp.).

Utworzyłem prosty skrypt, aby sprawdzić, czy mój Internet jest nadal podłączony, a jeśli nie, uruchom ponownie menedżera sieci.

#!/bin/bash

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

Utworzyłem cronjob root sudo crontab -ei ustawiałem go tak, aby co minutę (możesz to robić rzadziej, ale skrypt jest prostym pingiem, więc nie wymaga dużych zasobów), aby uruchamiał skrypt.

Tak więc, jeśli moje Wi-Fi z jakiegoś powodu wyłączy się, wyłączy się tylko na około minutę, szczyty. Jeśli nie jesteś zaznajomiony cron, polecam przeczytać to

Try431
źródło