Làm cho Trình quản lý mạng khởi động lại sau khi ngắt kết nối?


18

Sử dụng Ubuntu 11.10 (Unity 3D) và kết nối internet cáp (DSL) không có bộ định tuyến hoặc modem.

Nếu tôi ngắt kết nối internet, tôi chỉ có thể kết nối lại bằng cách nhấp vào biểu tượng trình quản lý mạng và chọn kết nối từ menu thả xuống vì các kết nối của tôi hiển thị. Không cần phải khởi động lại trình quản lý mạng.

Nhưng bất cứ khi nào kết nối internet giảm bởi chính nó , tôi có mở một sử dụng thiết bị đầu cuối và sudo service network-manager restartkể từ khi tôi không thấy bất kỳ kết nối trong thả quản lý mạng down menu. Chỉ sau lệnh, trình quản lý mạng mới khởi động và tự động kết nối.

Có một số cài đặt để người quản lý mạng không phải khởi động lại mỗi khi kết nối bị ngắt (trái ngược với việc tôi ngắt kết nối khi không cần khởi động lại)?

Tôi đoán nói cách khác, tôi không muốn người quản lý mạng dừng lại miễn là tôi đang sử dụng máy tính, bất kể kết nối của tôi với ISP có bị rớt hay không.

Nó không phải là một vấn đề lớn để mở một thiết bị đầu cuối và gõ lệnh và mật khẩu, nhưng nếu có một cách để đảm bảo rằng người quản lý mạng không dừng lại thì sẽ tốt hơn.

chỉnh sửa ngày 26 tháng 1 năm 2012: Dòng từ 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

nhập mô tả hình ảnh ở đây



Vui lòng thử hai giải pháp sau: (1) forum.fedoraforum.org/showthread.php?t=229718#2 (2) platonic.techfiz.info/2009/07/28/ - - Thật không may, tôi không có băng thông rộng di động kết nối để thử chúng.
Savvas Radevic

@medigeek, thậm chí tôi không có kết nối di động. Đó là kết nối DSL (có dây): cáp cắm vào ổ cắm loại điện thoại. Không có bộ định tuyến hoặc modem can thiệp vào cuối của tôi.

@ vasa1 ngắt kết nối DSL của bạn và đưa ra lệnh này trong thiết bị đầu cuối. nmcli con up id "DSL connection 1". Tôi không có DSL nên tôi cần sự giúp đỡ của bạn với tất cả lệnh và đầu ra. Nhận xét đầu ra của bạn.
Rahul Virpara

đưa ra kết quả:nmcli -t -f TYPE,STATE dev
Rahul Virpara

Câu trả lời:


16

Đây là một kịch bản Upstart bạn có thể đặt /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

Khi mất địa chỉ IP cho eth0 (cấu hình vào giao diện của bạn nếu khác), nó sẽ khởi động lại công việc quản lý mạng và khôi phục kết nối.


Đây là điều hoàn toàn mới đối với tôi vì vậy tôi sẽ đánh giá cao việc cầm tay. Tôi có tạo một tệp văn bản có tên reconnect.conf và đặt nó trong / etc / init với quyền "root" không? Tôi có sử dụng từ văn bản cho từ không? Trong phần "Kết nối mạng hoạt động" của tôi, tôi thấy "Giao diện: Ethernet (eth0)". Tên kết nối của tôi là "vasa1". Tôi có để lại "inet addr:" hay tôi phải nhập một số giá trị? Ubuntu sẽ biết rằng tập tin này phải được đọc? Hay tôi phải làm gì đó?

1
Làm như bạn đã nói, khi root tạo một tệp được gọi reconnect.confđến /etc/init. Điều duy nhất bạn cần thay đổi là eth0 thành thứ khác nếu nó không đúng. inet addr:một phần chỉ là một bộ lọc cho grep và không nên chạm vào. Tên kết nối có liên quan có thể được kiểm tra thông qua ifconfig. Upstart sẽ tự động đọc tệp này và bạn nên làm sudo start reconnectđể hoàn thành công việc. Trong lần khởi động lại tiếp theo, nó sẽ tự động bắt đầu.
Tuminoid

Dòng đầu tiên ifconfigbắt đầu bằng ethovì vậy tôi sẽ sử dụng nó và sau đó sudo start reconnectkhi kết nối giảm xuống. Tôi sẽ đăng lại với kết quả. Cảm ơn!

Tôi đã tạo /etc/init/reconnect.confvà khởi động lại. Khi kết nối của tôi bị mất một thời gian sau khi khởi động lại, nm không khởi động lại. Thế là tôi ban hành sudo start reconnect. reconnect stop/waitinglà phản hồi nhưng nm không khởi động lại. Tôi đã phải sudo service network-manager restartlàm những gì tôi thường làm. Thay vì restart network-manager, một cái gì đó như restart service network-managerđược yêu cầu? (BTW, tôi đã đặt eth0 chứ không phải etho (không giống như những gì có trong nhận xét trước đây của tôi))

Trên hệ thống của tôi, trình quản lý mạng là một công việc mới nhất cho bước sóng và các lệnh trên hoạt động tốt với tôi, nhưng hãy thoải mái thay đổi lệnh khởi động lại thành bất kỳ hoạt động nào trong hệ thống của bạn, chẳng hạn như service network-manager restart. Chỉ tò mò, đầu ra của status network-managerhệ thống của bạn là gì? Nếu điều đó nói stop/waiting(hoặc đưa ra lỗi) sau khi khởi động lại, bạn cần thay đổi bắt đầu với một cái gì đó như start on runlevel [2345]và thêm sleep 60trước đó trong khi.
Tuminoid

2

Cách giải quyết nhanh và bẩn là viết một tập lệnh chạy ping -i 5 google.com || service network-manager restartbằng root (bạn có thể viết /etc/init.d/-daemon cho điều đó, nhưng vì giải pháp RẤT bẩn, tôi sẽ không làm điều đó)

Tập lệnh đó sẽ khởi động lại trình quản lý mạng mỗi khi không tìm thấy Google và kiểm tra mỗi giây thứ năm.


Tôi đã bỏ phiếu này mặc dù tôi không hiểu giải pháp vì tôi chưa bao giờ viết kịch bản trước đây. Bạn có thể vui lòng cho biết chi tiết từng bước?

Tôi đang đọc và tôi muốn biết liệu có ổn không khi liên tục ping một trang web. Tôi có ấn tượng rằng ping được sử dụng chủ yếu để xử lý sự cố.

1
Có lẽ là không, đó là một lý do tại sao nó bẩn;) hãy thử sử dụng giải pháp Tuminoids một chút, điều đó không hoạt động nếu máy chủ DNS gặp rắc rối, nhưng nó sẽ hoạt động trong hầu hết các trường hợp!
sakjur

Tôi khá là một người mới và đã không nhận được những gì
TRỰC TIẾP

1
Về cơ bản, nó hoạt động bằng cách gửi yêu cầu tới Google cứ sau 5 giây và khởi động lại trình quản lý mạng nếu bạn không thể truy cập Google. Nó bẩn vì nó không phải là một cách tốt để làm điều đó, nó không phải là một cách hiệu quả để làm điều đó và bạn chỉ có thể tạo một sysadmin ở đâu đó chặn địa chỉ IP của bạn;) (Tôi không nghĩ Google sẽ làm điều đó, nhưng nó không phải là rất dù sao cũng tốt) Hãy nghĩ về nó như ngồi và chọc một người để xem bạn còn sống không;)
sakjur

2

Hãy thử wicd thay vì quản lý mạng, nó đã được đề xuất cho trường hợp tương tự: https://bbs.archlinux.org/viewtopic.php?id=124443

Tôi không biết nếu nó sẽ khắc phục vấn đề cũng như nếu wicd hỗ trợ pppoe.

  1. Sao lưu các tệp .deb, chỉ trong trường hợp:

    sudo apt-get download network-manager network-manager-gnome
    
  2. Lọc quản lý mạng và cài đặt wicd

    sudo apt-get purge network-manager network-manager-gnome
    sudo apt-get install wicd wicd-gtk
    
  3. Khởi động lại. Cố gắng kết nối bằng wicd.

Nếu có gì sai, chỉ cần xóa wicd và cài đặt lại trình quản lý mạng:

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

Cảm ơn rất nhiều, medigeek! Ba điểm. Một, trong trường hợp archlinux, OP đã không quay lại để đăng xem liệu thay đổi thành wicd có giải quyết được vấn đề hay không. Thứ hai, trong khi đó là một sự bất tiện, tôi ngần ngại thay đổi từ mặc định. Hiện tại, tôi đang sử dụng bí danh này: alias nm='echo "password" | sudo -S service network-manager restart'như một cách giải quyết. Thứ ba, từ các liên kết hữu ích khác của bạn, có vẻ như vấn đề không liên quan đến Ubuntu nhưng là "ngược dòng" và vì vậy tôi sẽ hỏi liệu câu hỏi này có nên được đóng lại không.

1
Đúng với điểm đầu tiên, tôi có lẽ nên xóa câu trả lời, vì trang FAQ của wicd nói rằng nó sẽ không hỗ trợ pppoe cho đến phiên bản wicd 2.0. Đối với điểm # 3, bạn có thể thử gửi lỗi trực tiếp lên thượng nguồn (pppd hoặc người quản lý mạng?)
Savvas Radevic

Tôi đã thêm bản thân vào lỗi launchpad bạn cung cấp.

0

Tôi đã tạo một kịch bản cho vấn đề này:

#!/bin/bash

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

Điều này đang hoạt động tốt nhưng tập lệnh này đang chiếm quá nhiều CPU của tôi. Có ai có thể giúp tôi về việc giảm mức sử dụng CPU không?


Nếu bạn muốn hỏi một câu hỏi mới, thay vào đó hãy hỏi nó như một câu hỏi riêng. Cách hỏi
Aditya

0

Tại sao tôi trả lời câu hỏi này?

Có những câu trả lời rất hay, nhưng tất cả đều được viết bằng init hoặc upstart. Kể từ bây giờ chúng tôi sẽ sử dụng systemd, tôi đang viết một kịch bản và thông tin tốt hơn. về cách làm điều đó

Nhưng có cách nào không?

Là, có một cách. Bạn chỉ cần tạo một tập lệnh theo dõi trạng thái mạng của bạn và khởi động lại Trình quản lý mạng theo yêu cầu. Chúng tôi sẽ xây dựng tập lệnh này và một dịch vụ systemd sẽ được khởi động cùng với hệ thống và sẽ theo dõi trạng thái mạng của bạn cứ sau 5 giây để tìm xem bạn có trực tuyến hay không.

Tôi nên làm gì?

Trước hết, chúng ta cần cài đặt công cụ fping để thực hiện một trong các kiểm tra kết nối (fping return "vẫn còn" nếu có thể kết nối và "không tìm thấy địa chỉ" nếu không):

$ sudo apt-get install fping -y

Bây giờ chúng tôi sẽ tạo tập lệnh màn hình trên hệ thống của chúng tôi. Tạo một tệp tại / usr / local / bin / được gọi là nm-watcher:

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

Và chỉnh sửa nó bằng nano hoặc trình soạn thảo văn bản ưa thích của bạn:

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

Sao chép và dán tập lệnh này bên trong trình chỉnh sửa, lưu và đóng tệp (nếu bạn đang sử dụng nano, như trong hướng dẫn này, hãy sử dụng "CTRL + X" "Y" và "ENTER" theo trình tự). Đừng quên thay đổi wlan0 thành giao diện mà bạn muốn wm-watcher theo dõi:

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

Để chạy tập lệnh này, chúng ta cần làm cho nó có thể thực thi được:

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

Bây giờ, chúng tôi sẽ tạo dịch vụ SystemD, vì điều này, bạn nên tạo và chỉnh sửa tệp nm-watcher.service tại / etc / systemd / system /:

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

Và đặt nội dung này trong tập tin:

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

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

[Install]
WantedBy=multi-user.target

Điều này sẽ tạo tệp dịch vụ làm cho SystemD gọi tập lệnh mà chúng ta đã tạo trước đó mỗi khi khởi động, sau khi chúng ta đã thiết lập một kết nối bằng cách sử dụng mạng-manager.service.

Chúng ta nên biết cho phép dịch vụ này chạy bằng:

$ sudo systemctl enable nm-watcher.service

Và bắt đầu dịch vụ bằng cách gõ:

$ sudo service nm-watcher start

Để xác minh nếu dịch vụ đang chạy loại:

$ sudo service nm-watcher status

Nếu bạn có bất kỳ vấn đề nào với dịch vụ, bạn có thể xem các thông báo gỡ lỗi bằng cách sử dụng:

$ sudo journalctl -u nm-watcher

Tôi có nên làm bất cứ điều gì khác?

Không, đây là tất cả những gì cần thiết để hoàn thành nhiệm vụ này. Kịch bản này có tác động rất thấp đến hiệu năng hệ thống, như bạn có thể thấy trong ảnh chụp màn hình này:

bước chân của người theo dõi


0

Trên máy tính xách tay cũ của tôi, tôi có một thẻ WiFi xấu, có xu hướng ngắt kết nối với WiFi nếu có quá nhiều tải (ví dụ: tải xuống các tệp lớn, v.v.).

Tôi đã tạo một tập lệnh đơn giản để kiểm tra xem internet của tôi có còn được kết nối hay không và nếu không, thì hãy khởi động lại trình quản lý mạng.

#!/bin/bash

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

Tôi đã tạo một cronjob gốc với sudo crontab -evà đặt nó sao cho mỗi phút (bạn có thể thực hiện nó ít thường xuyên hơn, nhưng tập lệnh là một ping đơn giản để không tốn nhiều tài nguyên) nó sẽ chạy tập lệnh.

Vì vậy, nếu WiFi của tôi bị tắt vì một số lý do, nó sẽ chỉ bị tắt khoảng một phút mỗi lần, lên đỉnh. Nếu bạn không quen thuộc cron, tôi khuyên bạn nên đọc

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.