Змусити Менеджер мереж перезапуститись після перерваного з'єднання?


18

Використання Ubuntu 11.10 (Unity 3D) та кабельне (DSL) підключення до Інтернету без маршрутизатора чи модему.

Якщо я відключаю підключення до Інтернету, я можу просто підключитися, натиснувши на піктограму мережевого менеджера та вибравши з'єднання зі спадного меню, оскільки видимі мої з'єднання. Не потрібно перезапускати мережевий менеджер.

Але всякий раз , коли підключення до Інтернету падає сам по собі , у мене відкритий термінал і використовувати , sudo service network-manager restartтак як я не бачу ніякого зв'язку зі спадного менеджер мережевого меню. Лише після команди, менеджер мережі потім запускається та автоматично підключається.

Чи є якесь налаштування, щоб менеджер мережі не перезапускався щоразу, коли з'єднання припиняється (на відміну від мого відключення його, коли він не потребує перезавантаження)?

Гадаю, іншими словами, я не хочу, щоб менеджер мережі зупинявся, поки я користуюся комп'ютером, незалежно від того, впав мій зв’язок з провайдером чи ні.

Відкрити термінал не дуже важливо і введіть команду та пароль, але якщо є спосіб переконатися, що менеджер мережі не зупиниться, було б краще.

редакція від 26 січня 2012 р .: Рядки з 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

введіть тут опис зображення



Будь ласка , спробуйте ці два рішення: (1) forums.fedoraforum.org/showthread.php?t=229718#2 (2) platonic.techfiz.info/2009/07/28 / ... - На жаль , у мене немає мобільного широкосмугового доступу з'єднання, щоб випробувати їх.
Савас Радевич,

@medigeek, навіть у мене немає мобільного зв'язку. Це з'єднання DSL (дротовий): кабель, який підключається до розетки телефонного типу. У мене немає маршрутизатора чи модему, що втручається.

@ vasa1 відключіть своє DSL-з'єднання і видайте цю команду в терміналі. nmcli con up id "DSL connection 1". У мене немає DSL, тому мені потрібна ваша допомога з усіма командами та висновками. Прокоментуйте свої результати.
Рахул Вірпара

дайте вихід:nmcli -t -f TYPE,STATE dev
Рахул Вірпара

Відповіді:


16

Ось сценарій Upstart, до якого ви можете розмістити /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

Після втрати ip-адреси для eth0 (налаштуйте на ваш інтерфейс, якщо він відрізняється), він перезапустить роботу мережевого менеджера та відновить з’єднання.


Це все для мене нове, тому я буду вдячний за проведення рук. Чи можу я створити текстовий файл з іменем Reconect.conf і помістити його в / etc / init з дозволом "root"? Чи використовую я слово для слова? У моєму "Активні мережеві з'єднання" я бачу "Інтерфейс: Ethernet (eth0)". Моє ім'я підключення - "vasa1". Чи залишаю я "inet addr:" як є, чи потрібно вводити якесь значення? Чи буде Ubuntu знати, що цей файл потрібно прочитати? Або я повинен щось робити?

1
Зробіть так, як ви сказали, як root зробіть файл, reconnect.confдо якого покликаний /etc/init. Єдине, що вам потрібно змінити, це eth0 на щось інше, якщо його невірно. inet addr:частина - це лише фільтр для грепа, і його не слід чіпати. Відповідне ім'я з'єднання можна перевірити за допомогою ifconfig. Upstart автоматично прочитає цей файл, і вам слід зробити, sudo start reconnectщоб розпочати роботу. При наступному перезавантаженні воно почнеться автоматично.
Туміноїд

Перший рядок ifconfigпочинається з ethoтого, що я буду використовувати це, а потім, sudo start reconnectколи з'єднання перестане . Я відправлю назад з результатом. Спасибі!

Я створив /etc/init/reconnect.confі перезавантажив. Коли мій зв’язок перервався через деякий час після перезавантаження, nm не перезапустився. Тому я видав sudo start reconnect. reconnect stop/waitingбула відповідь, але нм не перезапустився. Мені довелося робити sudo service network-manager restartте, що я зазвичай роблю. Замість цього restart network-manager, чи потрібно щось подібне restart service network-manager? (До речі, я поставив eth0, а не ето (на відміну від того, що є в моєму попередньому коментарі))

У моєму системному менеджері мережевих завдань для nm запущено, а команди вище працюють для мене добре, але сміливо міняйте команду перезавантаження на те, що працює у вашій системі, наприклад service network-manager restart. Просто цікаво, який результат у status network-managerвашій системі? Якщо це говорить stop/waiting(або видає помилку) після перезавантаження, вам потрібно змінити початок на щось на зразок start on runlevel [2345]і додати sleep 60до цього часу.
Туміноїд

2

Швидкий і брудний спосіб вирішити - це написати сценарій, який працює ping -i 5 google.com || service network-manager restartяк root (ви можете написати /etc/init.d/-daemon для цього, але оскільки рішення ДУЖЕ брудне, я б цього не робив)

Цей сценарій буде перезапускати мережевий менеджер кожного разу, коли Google не знайдеться, і перевіряє один раз на п'яту секунду.


Я проголосував за це, хоча не розумію рішення, тому що раніше ніколи не писав сценарій. Чи можете ви, будь ласка, надати детальні деталі?

Я читаю читання і хочу знати, чи нормально багаторазово переписувати сайт. У мене складається враження, що пінг використовується в основному для усунення неполадок.

1
Мабуть, ні, це одна з причин, чому це брудно;) спробуйте трохи використати рішення Tuminoids, яке не спрацює, якщо DNS-сервери клопітні, але це має працювати в більшості випадків!
sakjur

Я зовсім новачок і не отримав те, що ГРУЗТИ у своїй відповіді ..
kernel_panic

1
В основному, це працює, надсилаючи запит до Google раз на п'яту секунду та перезавантажуючи мережевий менеджер, якщо ви не можете зв’язатися з Google. Це брудно, тому що це не гарний спосіб зробити це, це не ефективний спосіб зробити це, і ви просто можете зробити системний адміністратор десь заблокувати вашу IP-адресу;) (Я не думаю, що Google це зробив би, але це не дуже все одно приємно) Подумайте про те, як сидіти і тикати людину, щоб побачити, чи ви все ще живі;)
sakjur

2

Спробуйте wicd замість мережевого менеджера, він був рекомендований у подібному випадку: https://bbs.archlinux.org/viewtopic.php?id=124443

Я не знаю, чи вирішить це проблему, ні якщо wicd підтримує pppoe.

  1. Зробіть резервну копію файлів .deb, про всяк випадок:

    sudo apt-get download network-manager network-manager-gnome
    
  2. Очистіть мережевий менеджер і встановіть wicd

    sudo apt-get purge network-manager network-manager-gnome
    sudo apt-get install wicd wicd-gtk
    
  3. Перезавантажте. Спробуйте підключитися за допомогою wicd.

Якщо щось піде не так, просто очистіть wicd і перевстановіть мережевий менеджер:

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

Дякую велике, medigeek! Три бали. По- перше, в разі Archlinux, ОП не повернувся , щоб отримати можливість відправляти чи зміна Wicd вирішити цю проблему. По-друге, хоча це доставляє незручності, я не вагаюся змінюватись за замовчуванням. Поки що я використовую цей псевдонім: alias nm='echo "password" | sudo -S service network-manager restart'як спосіб вирішення. По-третє, з інших ваших корисних посилань виявляється, що проблема не має нічого спільного з Ubuntu, але є "вище за течією", тому я збираюся запитати, чи слід це питання закривати.

1
Що стосується першого пункту, я, мабуть, повинен видалити відповідь, оскільки на сторінці wicd FAQ задано, що він не підтримує pppoe до wicd версії 2.0. Для пункту №3 ви можете спробувати подати помилку прямо вгору (pppd або мережевий менеджер?)
Савас Радевич,

Я додав себе до помилки запуску, яку ви надали.

0

Я створив сценарій для цієї проблеми:

#!/bin/bash

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

Це працює добре, але цей сценарій займає занадто багато мого процесора. Чи може хтось допомогти мені зменшити використання процесора?


Якщо ви хочете задати нове запитання, замість цього задайте його окремо. Як спитати
Адітя

0

Чому я відповідаю на це запитання?

Там дуже хороші відповіді, але все написано за допомогою init або upstart. Оскільки відтепер ми будемо використовувати systemd, я пишу кращий сценарій та інформацію. про те, як це зробити.

Але чи є спосіб?

Є, є спосіб. Вам просто потрібно створити сценарій, який відстежує стан вашої мережі та перезапустити Менеджер мереж на вимогу. Ми створимо цей сценарій та системний сервіс, який буде запущено з системою, і буде контролювати стан вашої мережі кожні 5 секунд, щоб виявити, чи ви в мережі чи ні.

Що я повинен зробити?

Перш за все, нам потрібно встановити інструмент fping, зробіть один із тестів на з'єднання (fping return "є" живим ", якщо з'єднання можливо, і" адреса не знайдена ", якщо ні):

$ sudo apt-get install fping -y

Тепер ми створимо сценарій монітора в нашій системі. Створіть файл у / usr / local / bin / під назвою nm-watcher:

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

І відредагуйте його за допомогою нано або вподобаного редактора тексту:

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

Скопіюйте та вставте цей скрипт всередину редактора, збережіть і закрийте файл (якщо ви використовуєте nano, як у цьому підручнику, використовуйте "CTRL + X" "Y" та "ENTER" послідовно). Не забудьте змінити wlan0 на інтерфейс, за яким потрібно контролювати 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

Для запуску цього сценарію нам потрібно зробити його виконуваним:

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

Тепер ми створимо службу SystemD, для цього вам слід створити та відредагувати файл nm-watcher.service за адресою / etc / systemd / system /:

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

І помістіть цей вміст у файл:

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

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

[Install]
WantedBy=multi-user.target

Це створить сервісний файл, який змушує SystemD викликати скрипт, який ми створили раніше при кожному завантаженні, після встановлення з'єднання за допомогою network-manager.service.

Ми повинні знати, як включити цю послугу за допомогою:

$ sudo systemctl enable nm-watcher.service

І розпочніть службу, ввівши:

$ sudo service nm-watcher start

Щоб перевірити, чи працює служба, введіть:

$ sudo service nm-watcher status

Якщо у вас є проблеми з сервісом, ви можете бачити повідомлення про налагодження за допомогою:

$ sudo journalctl -u nm-watcher

Чи варто робити якісь інші речі?

Ні, це все, що потрібно для виконання цього завдання. Цей сценарій має дуже низький вплив на продуктивність системи, як ви можете побачити на цьому скріншоті:

нм-годинник слід


0

На моєму старшому ноутбуці у мене погана карта WiFi, яка мала тенденцію відключатися від WiFi, якщо було багато навантаження (наприклад, завантаження великих файлів тощо).

Я створив простий скрипт, щоб перевірити, чи мій Інтернет все ще підключений, а якщо його немає, перезавантажте мережевий менеджер.

#!/bin/bash

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

Я створив кореневу cronjob за допомогою sudo crontab -eі встановив його таким чином, щоб щохвилини (ви можете робити це рідше, але сценарій є простим пінг-файлом, тому він не потребує ресурсів), він би запустив сценарій.

Отже, якби мій WiFi з якихось причин вийшов, він би колись виходив близько хвилини за один раз, вершини. Якщо ви незнайомі cron, рекомендую прочитати це

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.