Faire redémarrer Network Manager après une connexion interrompue?


18

Utilisation d'Ubuntu 11.10 (Unity 3D) et d'une connexion Internet par câble (DSL) sans routeur ni modem.

Si je déconnecte ma connexion Internet, je peux simplement me reconnecter en cliquant sur l'icône du gestionnaire de réseau et en sélectionnant une connexion dans le menu déroulant car mes connexions sont visibles. Il n'est pas nécessaire de redémarrer le gestionnaire de réseau.

Mais chaque fois que la connexion Internet tombe d'elle - même , j'ai ouvert un terminal et sudo service network-manager restartje l' utilise car je ne vois aucune connexion dans le menu déroulant du gestionnaire de réseau. Ce n'est qu'après la commande que le gestionnaire de réseau démarre et se connecte automatiquement.

Existe-t-il un paramètre pour que le gestionnaire de réseau ne doive pas être redémarré à chaque fois que la connexion est interrompue (par opposition à ma déconnexion lorsqu'elle n'a pas besoin de redémarrage)?

Je suppose qu'en d'autres termes, je ne veux pas que le gestionnaire de réseau s'arrête aussi longtemps que j'utilise l'ordinateur, que ma connexion au FAI soit interrompue ou non.

Ce n'est pas très grave d'ouvrir un terminal et de taper la commande et le mot de passe, mais s'il y a un moyen de s'assurer que le gestionnaire de réseau ne s'arrête pas, ce serait mieux.

édition du 26 janvier 2012: lignes de 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

entrez la description de l'image ici



Veuillez essayer ces deux solutions: (1) forums.fedoraforum.org/showthread.php?t=229718#2 (2) platonic.techfiz.info/2009/07/28/… - Malheureusement, je n'ai pas de haut débit mobile connexion pour les essayer.
Savvas Radevic

@medigeek, même je n'ai pas de connexion mobile. C'est une connexion DSL (filaire): un câble qui se branche sur une prise de type téléphone. Il n'y a aucun routeur ou modem intervenant de mon côté.

@ vasa1 déconnectez votre connexion DSL et émettez cette commande dans le terminal. nmcli con up id "DSL connection 1". Je n'ai pas de DSL, j'ai donc besoin de votre aide pour toutes les commandes et sorties. Commentez votre sortie.
Rahul Virpara

donner la sortie:nmcli -t -f TYPE,STATE dev
Rahul Virpara

Réponses:


16

Voici un script Upstart que vous pouvez placer pour /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

En cas de perte d'une adresse IP pour eth0 (configurez votre interface si elle est différente), il redémarrera le travail du gestionnaire de réseau et restaurera la connectivité.


Tout cela est nouveau pour moi, donc j'apprécierai la tenue de la main. Dois-je créer un fichier texte nommé reconnect.conf et le placer dans / etc / init avec l'autorisation "root"? Dois-je utiliser le texte mot pour mot? Dans mes "Connexions réseau actives", je vois "Interface: Ethernet (eth0)". Mon nom de connexion est "vasa1". Dois-je laisser "inet addr:" tel quel ou dois-je saisir une valeur? Ubuntu saura-t-il que ce fichier doit être lu? Ou dois-je faire quelque chose?

1
Est - ce que comme vous l' avez dit, en tant que root faire un fichier appelé reconnect.confà /etc/init. La seule chose que vous devez changer est eth0 en quelque chose d'autre si ce n'est pas correct. inet addr:partie est juste un filtre pour grep et ne doit pas être touchée. Le nom de connexion pertinent peut être vérifié via ifconfig. Upstart lira ce fichier automatiquement et vous devriez le faire sudo start reconnectpour démarrer le travail. Au prochain redémarrage, il démarrera automatiquement.
Tuminoïde

La première ligne de ifconfigcommence par ethodonc je vais l'utiliser et puis sudo start reconnectquand la connexion sera coupée. Je reviendrai avec le résultat. Merci!

J'ai créé /etc/init/reconnect.confet redémarré. Lorsque ma connexion a chuté quelque temps après le redémarrage, nm n'a pas redémarré. J'ai donc émis sudo start reconnect. reconnect stop/waitingétait la réponse mais nm n'a pas redémarré. Je devais savoir sudo service network-manager restartce que je fais normalement. Au lieu de cela restart network-manager, est-ce que quelque chose comme cela restart service network-managerserait requis? (BTW, j'ai mis eth0 et pas etho (contrairement à ce qui était là dans mon commentaire précédent))

Sur mon système, le gestionnaire de réseau est un travail parvenu pour le nm et les commandes ci-dessus fonctionnent bien pour moi, mais n'hésitez pas à changer la commande de redémarrage pour tout ce qui fonctionne dans votre système, comme service network-manager restart. Juste curieux, quelle est la sortie de status network-managervotre système? Si cela indique stop/waiting(ou donne une erreur) après le redémarrage, vous devez changer le début en quelque chose comme start on runlevel [2345]et ajouter sleep 60avant tout.
Tuminoïde

2

Une solution rapide et sale consiste à écrire un script qui s'exécute en ping -i 5 google.com || service network-manager restarttant que root (vous pouvez écrire un /etc/init.d/-daemon pour cela, mais comme la solution est TRÈS sale, je ne ferais pas ça)

Ce script redémarre le gestionnaire de réseau chaque fois que Google n'est pas trouvé et vérifie une fois toutes les cinq secondes.


J'ai voté pour cela même si je ne comprends pas la solution car je n'ai jamais écrit de script auparavant. Pourriez-vous s'il vous plaît donner des détails par étapes?

Je fais un peu de lecture et je veux savoir si c'est correct de ping à plusieurs reprises un site. J'ai l'impression que le ping est utilisé principalement pour le dépannage.

1
Probablement pas, c'est une des raisons pour lesquelles c'est sale;) essayez d'utiliser la solution Tuminoids un peu plus haut, cela ne fonctionne pas si les serveurs DNS sont gênants, mais cela devrait fonctionner dans la plupart des cas!
sakjur

Je suis un débutant et
je n'ai

1
Fondamentalement, cela fonctionne en envoyant une demande à Google une fois toutes les cinq secondes et en redémarrant le gestionnaire de réseau si vous ne pouvez pas atteindre Google. C'est sale parce que ce n'est pas un bon moyen de le faire, ce n'est pas un moyen efficace de le faire et vous pourriez juste faire qu'un administrateur système quelque part bloque votre adresse IP;) (Je ne pense pas que Google le ferait, mais ce n'est pas très agréable quand même) Considérez-le comme assis et piquer une personne pour voir si vous êtes toujours en vie;)
sakjur

2

Essayez wicd au lieu de network-manager, il a été recommandé pour un cas similaire: https://bbs.archlinux.org/viewtopic.php?id=124443

Je ne sais pas si cela résoudra le problème ni si wicd prend en charge pppoe.

  1. Sauvegardez les fichiers .deb, au cas où:

    sudo apt-get download network-manager network-manager-gnome
    
  2. Purger le gestionnaire de réseau et installer wicd

    sudo apt-get purge network-manager network-manager-gnome
    sudo apt-get install wicd wicd-gtk
    
  3. Redémarrez. Essayez de vous connecter à l'aide de wicd.

En cas de problème, purgez simplement wicd et réinstallez le gestionnaire de réseau:

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

Merci beaucoup, medigeek! Trois points. Premièrement, dans le cas archlinux, l'OP n'est pas revenu pour signaler si le changement de wicd a résolu le problème. Deuxièmement, bien que ce soit un inconvénient, j'hésite à changer la valeur par défaut. Pour l'instant, j'utilise cet alias: alias nm='echo "password" | sudo -S service network-manager restart'comme solution de contournement. Troisièmement, d'après vos autres liens utiles, il semble que le problème n'a rien à voir avec Ubuntu mais est "en amont" et je vais donc demander si cette question doit être fermée.

1
Vrai pour le premier point, je devrais probablement supprimer la réponse, car la page FAQ de wicd dit qu'elle ne supportera pas pppoe jusqu'à la version 2.0 de wicd. Pour le point # 3, vous pouvez essayer de déposer un bogue directement en amont (pppd ou gestionnaire de réseau?)
Savvas Radevic

Je me suis ajouté au bug du tableau de bord que vous avez fourni.

0

J'ai créé un script pour ce problème:

#!/bin/bash

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

Cela fonctionne bien, mais ce script prend trop de mon processeur. Quelqu'un peut-il m'aider à réduire l'utilisation du processeur?


Si vous souhaitez poser une nouvelle question, posez-la plutôt séparément. Comment demander
Aditya

0

Pourquoi je réponds à cette question?

Il y a de très bonnes réponses, mais tout est écrit en utilisant init ou upstart. À partir de maintenant, nous utiliserons systemd, j'écris un meilleur script et de meilleures informations. sur la façon de le faire.

Mais existe-t-il un moyen?

Est, il y a un moyen. Il vous suffit de créer un script qui surveille l'état de votre réseau et de redémarrer Network Manager à la demande. Nous allons construire ce script et un service systemd qui sera démarré avec le système et surveillerons l'état de votre réseau toutes les 5 secondes pour savoir si vous êtes en ligne ou non.

Que devrais-je faire?

Tout d'abord, nous devons installer l'outil fping pour effectuer l'un des tests de connexion (fping return "est vivant" si une connexion est possible et "adresse non trouvée" sinon):

$ sudo apt-get install fping -y

Nous allons maintenant créer le script de moniteur sur notre système. Créez un fichier dans / usr / local / bin / appelé nm-watcher:

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

Et modifiez-le en utilisant nano ou votre éditeur de texte préféré:

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

Copiez et collez ce script dans l'éditeur, enregistrez et fermez le fichier (si vous utilisez nano, comme dans ce tutoriel, utilisez "CTRL + X" "Y" et "ENTER" dans l'ordre). N'oubliez pas de changer wlan0 pour l'interface que vous voulez que wm-watcher surveille:

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

Pour exécuter ce script, nous devons le rendre exécutable:

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

Maintenant, nous allons créer le service SystemD, pour cela, vous devez créer et éditer le fichier nm-watcher.service dans / etc / systemd / system /:

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

Et mettez ce contenu dans le fichier:

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

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

[Install]
WantedBy=multi-user.target

Cela créera le fichier de service qui fera appeler SystemD le script que nous avons créé avant à chaque démarrage, après avoir établi une connexion en utilisant network-manager.service.

Nous devons savoir activer ce service en utilisant:

$ sudo systemctl enable nm-watcher.service

Et démarrez le service en tapant:

$ sudo service nm-watcher start

Pour vérifier si le service est en cours d'exécution, tapez:

$ sudo service nm-watcher status

Si vous avez des problèmes avec le service, vous pouvez voir les messages de débogage en utilisant:

$ sudo journalctl -u nm-watcher

Dois-je faire autre chose?

Non, c'est tout ce qu'il faut pour accomplir cette tâche. Ce script a un impact très faible sur les performances du système, comme vous pouvez le voir sur cette capture d'écran:

empreinte nm-watcher


0

Sur mon ancien ordinateur portable, j'avais une mauvaise carte WiFi qui avait tendance à se déconnecter du WiFi s'il y avait beaucoup de charge (par exemple, télécharger de gros fichiers, etc.).

J'ai créé un script simple pour vérifier si mon Internet était toujours connecté, et si ce n'était pas le cas, redémarrer le gestionnaire de réseau.

#!/bin/bash

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

J'ai créé un cronjob racine avec sudo crontab -e, et je l'ai défini de telle sorte que chaque minute (vous pouvez le faire moins souvent, mais le script est un simple ping donc il ne consomme pas beaucoup de ressources) il exécuterait le script.

Donc, si mon WiFi s'éteignait pour une raison quelconque, il ne le serait que pendant environ une minute à la fois, en haut. Si vous n'êtes pas familier avec cron, je vous recommande de lire ceci

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.