101 votes

Comment réussir à redémarrer un réseau sans reboot par SSH ?

Dans Ubuntu 14.04 ni sudo service networking restart ni sudo /etc/init.d/networking restart ne plus rien faire. Ils sortent également tous les deux avec le code 1. Quelque chose a manifestement changé (ou à moitié changé) mais je n'arrive pas à trouver quoi. Cela pose évidemment des problèmes avec la reconfiguration du réseau à distance et les outils comme Ansible.

$ sudo bash -x /usr/sbin/service networking restart
[sudo] password for wirehive:
++ basename /usr/sbin/service
+ VERSION='service ver. 0.91-ubuntu1'
++ basename /usr/sbin/service
+ USAGE='Usage: service < option > | --status-all | [ service_name [ command | --full-restart ] ]'
+ SERVICE=
+ ACTION=
+ SERVICEDIR=/etc/init.d
+ OPTIONS=
+ '[' 2 -eq 0 ']'
+ cd /
+ '[' 2 -gt 0 ']'
+ case "${1}" in
+ '[' -z '' -a 2 -eq 1 -a networking = --status-all ']'
+ '[' 2 -eq 2 -a restart = --full-restart ']'
+ '[' -z '' ']'
+ SERVICE=networking
+ shift
+ '[' 1 -gt 0 ']'
+ case "${1}" in
+ '[' -z networking -a 1 -eq 1 -a restart = --status-all ']'
+ '[' 1 -eq 2 -a '' = --full-restart ']'
+ '[' -z networking ']'
+ '[' -z '' ']'
+ ACTION=restart
+ shift
+ '[' 0 -gt 0 ']'
+ '[' -r /etc/init/networking.conf ']'
+ which initctl
+ grep -q upstart
+ initctl version
+ case "${ACTION}" in
+ stop networking
stop: Job failed while stopping
+ :
+ exec start networking
start: Job is already running: networking

Quelle est la manière correcte de redémarrer le réseau à distance dans Ubuntu 14.04 Server ?

126voto

SimonJGreen Points 2391

Il s'avère que c'est une "fonctionnalité". Le site seulement La méthode supportée pour redémarrer une interface dans Ubuntu Server est la suivante sudo ifdown eth0 && sudo ifup eth0

https://bugs.launchpad.net/ubuntu/+source/ifupdown/+bug/1301015

73voto

dmityugov Points 756

Ifdown, ifup n'ont pas fonctionné pour moi (probablement le timeout de la connexion SSH avant la deuxième commande). Ce qui a fonctionné est :

sudo service network-manager restart

C'était sur un système 14.04 ubuntu-desktop.

6voto

kvm-user420 Points 527

Ce qui a changé, c'est qu'ils ne veulent plus que vous fassiez rebondir le réseau. L'arrêt et le démarrage fonctionnent toujours, mais le redémarrage ne fonctionne plus. Je viens de "résoudre" ce "problème", c'est-à-dire que j'ai récupéré l'ancien comportement. Pour revenir à l'ancien comportement : Prenez un fichier /etc/init/networking.conf 13.10 et remplacez le fichier 14.04 par celui-ci. (edit : clarifié qui remplace qui)

Le processus se présente comme suit :

(Just before this, I configured my /etc/network/interfaces for eth1 on a 192.168.117.x address)

"/etc/network/interfaces" 16L, 413C written  
root@1404-Anode:~# service networking restart  
stop: Job failed while stopping  
start: Job is already running: networking  
root@1404-Anode:~# echo "hmm, wth?"
hmm, wth?
root@1404-Anode:~# ifconfig  
eth0      Link encap:Ethernet  HWaddr 00:0c:29:d6:a8:19  
          inet addr:192.168.115.105  Bcast:192.168.115.255  Mask:255.255.255.0  
          inet6 addr: 2002:4077:9050:1234:a08c:29c1:ce9b:a57b/64 Scope:Global  
          inet6 addr: fe80::20c:29ff:fed6:a819/64 Scope:Link  
          inet6 addr: 2002:4077:9050:1234:20c:29ff:fed6:a819/64 Scope:Global  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
          RX packets:646 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:531 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:1000  
          RX bytes:58748 (58.7 KB)  TX bytes:75465 (75.4 KB)  
(lo removed here)  
root@1404-Anode:~# cd /etc/init
root@1404-Anode:/etc/init# diff networking.conf.1310 networking.conf.1404  
13c13  
<       and (stopped udevtrigger or container)) or runlevel [2345]  
---  
>     and (stopped udevtrigger or container)) or runlevel [2345] or stopped  networking   >RESULT=failed PROCESS=post-stop EXIT_STATUS=100  
16a17,20  
>     if [ "$UPSTART_EVENTS" = "stopped" ] && [ "$UPSTART_JOB" = "networking" ] && [ "$EXIT_STATUS" = "100" ]; then  
>         exit 0  
>     fi  
>  
21a26,31  
>     if [ -z "$UPSTART_STOP_EVENTS" ]; then  
>        echo "Stopping or restarting the networking job is not supported."  
>         echo "Use ifdown & ifup to reconfigure desired interface."  
>         exit 100  
>     fi  
root@1404-Anode:/etc/init#  

Faites de même pour /etc/init.d/networking script, qui est ce que le fichier /etc/init/networking.conf référence/appelle.

root@1404-Anode:/etc/init# cp networking.conf.1310 networking.conf  
root@1404-Anode:/etc/init# cd ../init.d  
root@1404-Anode:/etc/init.d# diff networking.1404 networking.1310  
15d14  
< STATEDIR="$RUN_DIR/state"
21a21,27
> # Make sure that it's clear to the user that they shouldn't use this
> # script under upstart
> if init_is_upstart; then
>       echo "ERROR: Calling a sysvinit script on a system using upstart isn't supported. Please use the 'service' command instead."  
>       exit 1
> fi
>
52,54d57
<       if ! chown root:netdev "$RUN_DIR" ; then
<           log_warning_msg "can't chown $RUN_DIR"
<       fi
160,162d162
<       if init_is_upstart; then
<               exit 1
<       fi
166c166
<       state=$(ifquery --state)
---
>       state=$(cat /run/network/ifstate)
root@1404-Anode:/etc/init.d# cp networking.1310 networking
root@1404-Anode:/etc/init.d# service networking restart
networking stop/waiting
networking start/running
root@1404-Anode:/etc/init.d# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:d6:a8:19
          inet addr:192.168.115.105  Bcast:192.168.115.255  Mask:255.255.255.0
          inet6 addr: 2002:4077:9050:1234:a08c:29c1:ce9b:a57b/64 Scope:Global
          inet6 addr: fe80::20c:29ff:fed6:a819/64 Scope:Link
          inet6 addr: 2002:4077:9050:1234:20c:29ff:fed6:a819/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3398 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2545 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:318654 (318.6 KB)  TX bytes:418804 (418.8 KB)

eth1      Link encap:Ethernet  HWaddr 00:0c:29:d6:a8:23
          inet addr:192.168.117.105  Bcast:192.168.117.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fed6:a823/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:98 errors:0 dropped:58 overruns:0 frame:0
          TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:20055 (20.0 KB)  TX bytes:1226 (1.2 KB)
(lo removed)
root@1404-Anode:/etc/init.d# echo "hah, it works! *8^)"
Hah, it works! *8^)
root@1404-Anode:/etc/init.d#

(note: the steps where I scp'd the 1310 versions into the 1404 system are omitted for brevity). 

Il y a évidemment une raison pour laquelle ils ont mis une sortie défensive, mais ils ne se donnent pas la peine de bien sortir ce qui se passe.

Une entrée apparaît dans /var/log/upstart/networking.log lorsque vous essayez, qui ressemble à ceci :

Stopping or restarting the networking job is not supported.  
Use ifdown & ifup to reconfigure desired interface.  

Mais ils auraient vraiment pu/devraient afficher ce message dans la boîte de dialogue lorsque vous essayez de redémarrer le réseau de service. ah bien, j'ai trouvé la solution et j'ai même trouvé une vieille méthode de contournement.

EDIT : J'ai constaté que cela provoque un déclenchement involontaire du script contrôlé par /etc/init/failsafe.conf, ce qui est indésirable car cela provoque un délai d'attente de 120 secondes à chaque démarrage... ainsi que peut-être le masquage de mauvaises configurations réelles/problèmes de réseau que l'apparition de ce délai indiquerait, mais il apparaît déjà tout le temps. (par exemple, un câble débranché, qui permettait l'accès à un partage de fichiers réseau mappé dans /etc/fstab, par exemple).

Quoi qu'il en soit, je vais trouver la cause de ce dépassement constant du délai d'attente et je publierai un correctif dès que je l'aurai trouvé.

3voto

metral Points 341

En référence à la réponse de kvm-user420, j'ai pris les devants et configuré un script pour remplacer le script réseau d'Ubuntu 14.04 par celui d'Ubuntu 13.10.

Vous pouvez le trouver ici : https://github.com/metral/restore_networking

Profitez-en !

0voto

Martin R-L Points 2300

Je règle le problème avec ce script : veuillez ajouter ce script sur "/etc/network/if-down.d".

cd /etc/network/if-down.d
vim ifdown

contenu :

#!/bin/bash 

for I in /sys/class/net/* 
do
        ifname=$(basename $I) 
        if [ $ifname != "lo" ] ; then 
                ip addr flush $ifname
        fi
done

et enfin :

chmod +x ifdown

maintenant vous pouvez changer l'adresse ip et redémarrer le service réseau avec la commande systemctl ou service .
NOTE ce script est trop simple et NE PAS MANIPULER vm,tap,bridge,... interfaces . actually flush all interfaces exclude lo (loopback) .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X