Wie starte ich ein Netzwerk erfolgreich neu, ohne über SSH neu zu starten?

98

In Ubuntu 14.04 weder sudo service networking restartnoch sudo /etc/init.d/networking restarttut nichts mehr. Sie beenden beide auch mit Code 1. Offensichtlich hat sich etwas geändert (oder die Hälfte hat sich geändert), aber ich kann nicht finden, was. Dies führt offensichtlich zu Problemen bei der Remotenetzwerk-Neukonfiguration und Tools wie 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

Was ist der richtige Weg, um das Netzwerk in Ubuntu 14.04 Server von einem entfernten Standort aus neu zu starten?

SimonJGreen
quelle
Möchten Sie das Netzwerk wirklich neu starten oder nur eine Schnittstelle wie eth0 neu starten? In jedem Fall wird die SSH-Verbindung wahrscheinlich unterbrochen.
Chili555
1
Da es sich bei beiden um Shell-Skripte handelt, informieren Sie sich bei sudo bash -x /usr/sbin/service networking restartundsudo bash -x /etc/init.d/networking restart
Waltinator am
@terdon ist ein bisschen albern, einen Tag für 14.04 zu haben, zumal die Beschreibung sagt, dass es sich um die "aktuelle" Version handelt, die es nicht ist. das heißt, dieses Problem ist in 13.10 vollständig reproduzierbar.
SimonJGreen
@ chili555 Ich möchte, dass Änderungen in / etc / network / interfaces wirksam werden. Bevor diese Skripte nicht mehr funktionieren, überstehen sie diesen Neustart.
SimonJGreen
@ Waltinator zusätzliche Informationen zur Frage hinzugefügt, danke für den Vorschlag
SimonJGreen

Antworten:

121

Es stellt sich heraus, dass dies ein "Merkmal" ist. Die einzige unterstützte Methode zum Neustarten einer Schnittstelle in Ubuntu Server istsudo ifdown eth0 && sudo ifup eth0

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

SimonJGreen
quelle
8
Stellen Sie sicher, dass Sie 'sudo ifdown eth0 & sudo ifup eth0' (beachten Sie das zweite sudo) ausführen, wenn Sie diesen Befehl nicht als root
ausführen
3
Ist dies in Ordnung, wenn eine Verbindung über SSH besteht? Dh, werden beide Befehle vor dem Trennen ausgeführt?
Meawoppl
2
In meinem Fall sudo service networking restartschien das Laufen die Dinge durcheinander gebracht zu haben. Also musste ich sudo ifdown eth0 && sudo ifup eth0zweimal rennen . Ja zweimal.
polarisieren
@ExceptionSlayer: Nein, sie haben nicht für mich gearbeitet. Ich musste den Server physisch ausschalten und wieder einschalten (Ubuntu 14.04).
Xdg
4
Verwenden Sie nicht a ;anstelle &&einer sichereren Option?
Isaac
72

ifdown, ifup hat bei mir nicht funktioniert (wahrscheinlich SSH-Zeitüberschreitung vor dem zweiten Befehl). Was hat funktioniert war:

sudo service network-manager restart

Dies war auf einem 14.04 Ubuntu-Desktop-System.

dpb
quelle
4
Die akzeptierte Antwort hat bei mir nicht funktioniert. dieser tat es. (Neuinstallation vom 14.04.1)
u2n
2
Kann bestätigen, dass dies für mich auf Trusty (Ubuntu 14.04) funktioniert.
Gerlos
3
Die "ifdown / ifup" -Antwort funktionierte auch bei Ubuntu 14.04 nicht, aber das tat es.
Dieuwe
4
Die akzeptierte Antwort gilt für Ubuntu 12.04 und niedriger. Diese Antwort ist akzeptabel für den 14.04.
Schweizer
4
Auf meinem 14.04.2 existiert dieser Dienst nicht - sudo service network-manager restart.
Xdg
6

Was sich geändert hat, ist, dass sie nicht mehr wollen, dass Sie das Netzwerk "bouncen". Anhalten und Starten funktionieren immer noch. Neustart funktioniert nicht mehr. Ich habe gerade dieses "Problem" "gelöst", das heißt, ich habe das alte Verhalten zurückbekommen. So kehren Sie zum vorherigen Verhalten zurück: Nehmen Sie eine 13.10 /etc/init/networking.conf-Datei und ersetzen Sie die 14.04-Datei durch diese. (edit: geklärt, welche welche ersetzt)

Der Prozess sieht folgendermaßen aus:

(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#  

Führen Sie dasselbe für das Skript /etc/init.d/networking aus, auf das in der Datei /etc/init/networking.conf verwiesen wird.

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). 

Offensichtlich gibt es einen Grund, warum sie einen defensiven Ausgang nehmen, aber sie kümmern sich nicht darum, wirklich das auszugeben, was sehr gut läuft.

Ein Eintrag in /var/log/upstart/networking.log sieht folgendermaßen aus:

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

Sie könnten / sollten dies jedoch als Dialogmeldung ausgeben, wenn Sie versuchen, das Netzwerk neu zu starten. Ah, gut. es herausgefunden und sogar eine altmodische Arbeit um.

EDIT: Ich habe festgestellt, dass dies zu einem unbeabsichtigten Auslösen des Skripts führt, das von /etc/init/failsafe.conf gesteuert wird. Dies ist unerwünscht, da es bei jedem Start eine Zeitüberschreitung von 120 Sekunden verursacht ... und möglicherweise tatsächliche Fehlkonfigurationen / Netzwerke maskiert Probleme, auf die das Erscheinen dieser Verzögerung hinweisen würde, die aber bereits ständig angezeigt werden. (z. B. ein nicht angeschlossenes Kabel, das den Zugriff auf eine in / etc / fstab zugeordnete Netzwerkdateifreigabe ermöglichte)

In jedem Fall werde ich herausfinden, was dies verursacht, und einen Fix posten, wenn ich ihn finde.

kvm-user420
quelle
5
Die Weisheit, das Verhalten eines Kernbetriebssystems zu ändern, ist umstritten.
0xF2
Warum haben sie die Fähigkeit zum Neustart entfernt? Ich würde das gerne wissen, bevor ich es wieder einsetze.
Flickerfly
@ 0xF2 - du meinst questionable.
Dale Anderson
@DaleAnderson das auch ;-)
0xF2
3

In Bezug auf die Antwort von kvm-user420 habe ich ein Skript erstellt, um die Netzwerkskripte von Ubuntu 14.04 durch die von Ubuntu 13.10 zu ersetzen

Sie finden es hier: https://github.com/metral/restore_networking

Genießen!

metral
quelle
Das hat bei mir funktioniert. Hoffentlich geht Upstart eines Tages einfach weg ;-)
Andrew
0

Ich behebe ein Problem mit diesem Skript: Bitte fügen Sie dieses Skript unter "/etc/network/if-down.d" hinzu.

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

Inhalt:

#!/bin/bash 

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

und schlussendlich :

chmod +x ifdown

Jetzt können Sie die IP-Adresse ändern und den Netzwerkdienst mit dem Befehl systemctl oder service neu starten.
HINWEIS : Dieses Skript ist zu einfach und NIEMALS mit vm, tap, bridge, ... -Oberflächen umzugehen. Tatsächlich werden alle Schnittstellen ohne lo (Loopback) geleert.

mah454
quelle