Перезапустить Network Manager после разрыва соединения?


18

Использование Ubuntu 11.10 (Unity 3D) и кабельного (DSL) интернет-соединения без маршрутизатора или модема.

Если я отключу свое интернет-соединение, я могу просто восстановить соединение, щелкнув по значку диспетчера сети и выбрав соединение из выпадающего меню, так как мои соединения видны. Нет необходимости перезапускать сетевой менеджер.

Но всякий раз, когда интернет-соединение разрывается само по себе , я открываю терминал и использую его, sudo service network-manager restartпоскольку не вижу никакого соединения в раскрывающемся меню диспетчера сети. Только после этой команды менеджер сети запускается и автоматически подключается.

Существуют ли какие-либо настройки, чтобы диспетчер сети не перезапускался при каждом разрыве соединения (в отличие от моего отключения, когда перезапуск не требуется)?

Другими словами, я не хочу, чтобы сетевой менеджер останавливался, пока я пользуюсь компьютером, независимо от того, было ли разорвано мое соединение с провайдером или нет.

Нет ничего сложного в том, чтобы открыть терминал и ввести команду и пароль, но если есть способ убедиться, что сетевой менеджер не останавливается, это было бы лучше.

редактировать от 26 января 2012 года: строки из системного журнала

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 (настройте на свой интерфейс, если он отличается), он перезапустит задание сетевого менеджера и восстановит связь.


Это все новое для меня, поэтому я буду признателен за руку. Я делаю текстовый файл с именемconnect.conf и помещаю его в / etc / init с правами root? Я использую текстовое слово в слово? В моих «Активных сетевых подключениях» я вижу «Интерфейс: Ethernet (eth0)». Мое имя подключения "vasa1". Я оставляю "inet addr:" как есть или я должен ввести какое-то значение? Будет ли Ubuntu знать, что этот файл нужно прочитать? Или я должен что-то сделать?

1
Есть так же , как вы сказали, как корень сделать файл с именем reconnect.confв /etc/init. Единственное, что вам нужно изменить, это eth0 на что-то другое, если это не правильно. inet addr:часть является просто фильтром для grep и не должна быть затронута. Соответствующее имя соединения можно проверить через ifconfig. Upstart прочитает этот файл автоматически, и вы должны сделать это, sudo start reconnectчтобы начать работу. При следующей перезагрузке он запустится автоматически.
Туминоид

Первая строка ifconfigначинается с, ethoтак что я буду использовать это, а затем, sudo start reconnectкогда соединение обрывается. Я отправлю обратно с результатом. Благодарность!

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

В моей системе сетевой менеджер - это выскочка для нм, и приведенные выше команды отлично работают для меня, но вы можете сменить команду перезапуска на любую, которая работает в вашей системе, например service network-manager restart. Просто любопытно, что выводится в status network-managerвашей системе? Если это говорит stop/waiting(или выдает ошибку) после перезагрузки, вам нужно изменить start на что-то вроде 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-серверы хлопотны, но в большинстве случаев должно работать!
Сакджур

Я новичок и не
понял,

1
По сути, он работает, отправляя запрос в Google раз в пятую секунду и перезапускает менеджера сети, если вы не можете связаться с Google. Это грязно, потому что это не хороший способ сделать это, это не эффективный способ сделать это, и вы просто можете заставить системного администратора где-то заблокировать ваш IP-адрес;) (Я не думаю, что Google сделает это, но это не очень В любом случае, приятно) Думайте об этом, как о том, что вы сидите и толкаете человека, чтобы увидеть, живы ли вы еще;)
Сакджур

2

Попробуйте wicd вместо network-manager, это было рекомендовано для аналогичного случая: 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 OP не вернулся, чтобы сообщить, решило ли изменение wicd проблему. Во-вторых, хотя это неудобство, я не решаюсь перейти от значения по умолчанию. Сейчас я использую этот псевдоним: alias nm='echo "password" | sudo -S service network-manager restart'как обходной путь. В-третьих, из ваших других полезных ссылок, похоже, что проблема не имеет ничего общего с Ubuntu, но является «восходящей», и поэтому я собираюсь спросить, должен ли этот вопрос быть закрыт.

1
Верно для 1-го пункта, я, вероятно, должен удалить ответ, так как на странице часто задаваемых вопросов по wicd написано, что он не будет поддерживать pppoe до версии 2.0 wicd. Для пункта № 3, вы можете попробовать зарегистрировать ошибку непосредственно в
апстриме

Я добавил себя к ошибке на панели запуска, которую вы предоставили.

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, я пишу лучший скрипт и информацию. о том, как это сделать.

Но есть ли способ?

Есть способ. Вам просто нужно создать скрипт, который контролирует состояние вашей сети и перезапустить Network Manager по требованию. Мы создадим этот сценарий и службу systemd, которая будет запускаться вместе с системой и будет отслеживать состояние вашей сети каждые 5 секунд, чтобы определить, подключены вы к сети или нет.

Что я должен делать?

Прежде всего, нам нужно установить инструмент fping, чтобы выполнить один из тестов соединения (fping возвращает «живо», если соединение возможно, и «адрес не найден», если нет):

$ sudo apt-get install fping -y

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

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

И отредактируйте его, используя nano или предпочитаемый вами текстовый редактор:

$ 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

На моем старом ноутбуке у меня была плохая карта Wi-Fi, которая имела тенденцию отключаться от Wi-Fi, если была большая нагрузка (например, загрузка больших файлов и т. Д.).

Я создал простой скрипт, чтобы проверить, подключен ли мой интернет, а если нет, то перезапустите диспетчер сети.

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