使网络管理器在断开连接后重新启动?


18

使用没有路由器或调制解调器的Ubuntu 11.10(Unity 3D)和电缆(DSL)Internet连接。

如果断开我的网络连接,我可以通过点击网络管理器图标,然后从下拉连接下拉菜单,因为我的连接是可见的重新连接。无需重新启动网络管理器。

但是每当互联网连接本身断开时,我都会打开一个终端并使用,sudo service network-manager restart因为在网络管理器的下拉菜单中看不到任何连接。仅在命令之后,网络管理器才启动并自动连接。

是否有一些设置可以使网络管理器不必在每次连接断开时都重新启动(而不是在不需要重新启动时断开连接)?

换句话说,我不希望网络管理员在我使用计算机时就停止运行,无论我与ISP的连接是否断开。

打开终端并输入命令和密码不是什么大问题,但是如果有一种方法可以确保网络管理器不停止,那就更好了。

编辑日期:2012年1月26日: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/…-不幸的是,我没有移动宽带连接尝试一下。
Savvas Radevic

@medigeek,即使我没有移动连接。这是DSL(有线)连接:插入电话类型插座的电缆。我的一端没有介入路由器或调制解调器。

@ vasa1断开DSL连接,并在终端中发出此命令。nmcli con up id "DSL connection 1"。我没有DSL,所以我需要您的所有命令和输出帮助。注释掉您的输出。
拉胡尔·维尔帕拉

给出输出:nmcli -t -f TYPE,STATE dev
Rahul Virpara

Answers:


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

丢失eth0的IP地址(如果接口不同则配置为接口)后,它将重新启动网络管理器作业并恢复连接。


这对我来说是全新的,所以我会很感激。我是否制作了一个名为reconnect.conf的文本文件,并以“ root”权限将其放置在/ etc / init中?我会逐字使用文字吗?在我的“活动网络连接”中,我看到“接口:以太网(eth0)”。我的连接名称是“ vasa1”。我应该保持“ inet addr:”不变还是必须输入一些值?Ubuntu会知道必须读取该文件吗?还是我必须做点什么?

1
就像你说的做,作为根创建一个名为文件reconnect.conf/etc/init。如果不正确,只需更改eth0即可。inet addr:part只是grep的过滤器,不应被触摸。可以通过检查相关的连接名称ifconfig。新贵将自动读取此文件,您应该执行此操作sudo start reconnect。下次重启时,它将自动启动。
Tuminoid 2012年

第一行的ifconfig开头是,etho所以我将sudo start reconnect在连接断开时使用它。我将结果寄回。谢谢!

我创建/etc/init/reconnect.conf并重新启动。重新启动后一段时间我的连接断开时,nm没有重新启动。于是我发出sudo start reconnectreconnect stop/waiting是响应,但nm没有重新启动。我sudo service network-manager restart通常要这样做。而不是restart network-manager,是否restart service network-manager需要类似的东西?(顺便说一句,我确实输入了eth0而不是etho(与我之前的评论不同))

在我的系统上,network-manager是nm的新贵工作,上面的命令对我来说很好用,但是可以随时将restart命令更改为系统中可用的任何命令,例如service network-manager restart。只是好奇,status network-manager您系统上的输出是什么?如果stop/waiting在重启后提示(或给出错误),则需要将开始更改为,start on runlevel [2345]然后再添加sleep 60
Tuminoid 2012年

2

一种快速而肮脏的解决方法是编写一个ping -i 5 google.com || service network-manager restart以root用户身份运行的脚本(您可以为此编写一个/etc/init.d/-daemon,但是由于该解决方案非常肮脏,所以我不会这样做)

每当未找到Google时,该脚本都会重新启动网络管理器,并每五秒钟检查一次。


即使我不了解解决方案,我还是投票赞成,因为我之前从未编写过脚本。您能否提供详细的步骤?

我正在阅读,我想知道是否可以重复ping一个站点。我的印象是ping主要用于解决问题。

1
可能不是,这就是为什么它很脏的原因;)尝试稍微使用Tuminoids解决方案,如果DNS服务器很麻烦,那是行不通的,但是在大多数情况下应该可以使用!
sakjur 2012年

林相当新手,没获取什么在你的答案DIRTY ..
kernel_panic

1
基本上,它的工作原理是每五秒钟向Google发送一次请求,并在您无法访问Google时重新启动网络管理器。这很脏,因为它不是一种好的方法,也不是一种有效的方法,您可能只是让系统管理员在某个地方阻止了您的IP地址;)(我不认为Google会这样做,但这不是很无论如何还是不错)将其视为坐着并戳一个人以查看您是否还活着;)
sakjur 2012年

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
对于第一点是正确的,我可能应该删除答案,因为wicd FAQ页面说它在wicd 2.0版之前不支持pppoe。对于第3点,您可以尝试直接向上游提交错误(pppd或网络管理器?)
Savvas Radevic 2012年

我将自己添加到了您提供的启动板错误中。

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

这工作正常,但是此脚本占用了我过多的CPU。谁能帮我降低CPU使用率?


如果您想提出一个新问题,请单独提出。如何提问
Aditya

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服务,为此,您应该在/ etc / systemd / system /下创建并编辑nm-watcher.service文件:

$ 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

在使用network-manager.service建立连接之后,这将创建服务文件,该文件使SystemD在每次引导时调用之前创建的脚本。

我们应该知道启用此服务可以使用:

$ sudo systemctl enable nm-watcher.service

并通过键入以下内容启动服务:

$ sudo service nm-watcher start

要验证服务是否正在运行,请输入:

$ sudo service nm-watcher status

如果服务有任何问题,可以使用以下命令查看调试消息:

$ sudo journalctl -u nm-watcher

我还应该做其他事情吗?

不,这是完成此任务所需的全部。该脚本对系统性能的影响很小,如您在此屏幕截图中所见:

nm-watcher足迹


0

在我的旧笔记本电脑上,我的WiFi卡损坏了,如果负载很大(例如,下载大文件等),则倾向于从WiFi断开连接。

我创建了一个简单的脚本来检查我的Internet是否仍然连接,如果没有,请重新启动网络管理器。

#!/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,并将其设置为每分钟(您可以更不频繁地执行此操作,但是该脚本是一个简单的ping操作,因此它不会占用大量资源),它将运行该脚本。

因此,如果我的WiFi确实由于某种原因而无法使用,那么每次最多只能使用一分钟左右。如果你不熟悉cron,我建议你阅读

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.