Come riavviare correttamente una rete senza riavviare tramite SSH?


98

In Ubuntu 14.04 né più sudo service networking restartsudo /etc/init.d/networking restartpiù nulla. Entrambi escono anche con il codice 1. Qualcosa è ovviamente cambiato (o metà cambiato) ma non riesco a trovare cosa. Ciò ovviamente causa problemi con la riconfigurazione della rete remota e strumenti come 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

Qual è il modo corretto di riavviare la rete in Ubuntu 14.04 Server da remoto?


Vuoi davvero riavviare la rete o semplicemente riavviare un'interfaccia come eth0? In ogni caso, probabilmente interromperà la connessione ssh.
chili555

1
Poiché entrambi sono script di shell, ottenere informazioni con sudo bash -x /usr/sbin/service networking restartesudo bash -x /etc/init.d/networking restart
waltinator il

@terdon è un po 'sciocco avere un tag in giro per 14.04, soprattutto perché la descrizione dice che è la versione "attuale" che non lo è. detto questo, questo problema è totalmente riproducibile in 13.10.
SimonJGreen

@ chili555 quello che voglio che accada è che le modifiche in / etc / network / interfaces abbiano effetto. Prima che questi script smettessero di funzionare, le connessioni SSH sopravvivevano a questo riavvio.
SimonJGreen

@waltinator informazioni aggiuntive aggiunte alla domanda, grazie per il suggerimento
SimonJGreen

Risposte:


121

Si scopre che questa è una "caratteristica". L' unico modo supportato per riavviare un'interfaccia in Ubuntu Server èsudo ifdown eth0 && sudo ifup eth0

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


8
Assicurati di eseguire 'sudo ifdown eth0 && sudo ifup eth0' (nota il secondo sudo) se non
esegui

3
Va bene fare questo se connesso tramite ssh? Vale a dire, entrambi i comandi verranno eseguiti prima della disconnessione?
meawoppl

2
Nel mio caso, la corsa sudo service networking restartsembrava aver incasinato le cose. Quindi ho dovuto correre sudo ifdown eth0 && sudo ifup eth0due volte. Sì, due volte.
Polarizza il

@ExceptionSlayer: No, non hanno funzionato per me. Ho dovuto spegnere fisicamente il server e riaccenderlo (Ubuntu 14.04).
Xdg

4
Non stai usando un'opzione ;invece di &&un'opzione più sicura?
Isaac,

72

ifdown, ifup non ha funzionato per me (probabile timeout della connessione SSH prima del secondo comando). Ciò che ha funzionato è stato:

sudo service network-manager restart

Questo era su un sistema Ubuntu-desktop 14.04.


4
La risposta accettata non ha funzionato per me; questo ha fatto. (Nuova installazione del 14.04.1)
u2n

2
Posso confermare che questo funziona per me su Trusty (Ubuntu 14.04).
Gerlos,

3
La risposta "ifdown / ifup" non ha funzionato neanche per me su Ubuntu 14.04, ma questo ha funzionato.
dieuwe,

4
La risposta accettata è applicabile per Ubuntu 12.04 e versioni precedenti. Questa risposta è accettabile per il 14.04.
Svizzera,

4
Sul mio 14.04.2 questo servizio non esiste - sudo service riavvio del gestore di rete.
Xdg

6

Ciò che è cambiato è che non vogliono più che tu "rimbalzi" sulla rete. fermarsi e avviarsi funziona ancora. il riavvio non funziona più. Ho solo "risolto" questo "problema", vale a dire ho ripreso il vecchio comportamento. Per ripristinare il comportamento precedente: prendere un file 13.10 /etc/init/networking.conf e sostituire il file 14.04 con esso. (modifica: chiarito quale sostituisce quale)

Il processo è simile al seguente:

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

Fare lo stesso per /etc/init.d/networking script, che è ciò che il file /etc/init/networking.conf fa riferimento / chiama.

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

Ovviamente c'è un motivo per cui hanno messo un'uscita difensiva lì dentro, ma non si preoccupano di produrre davvero ciò che sta succedendo molto bene.

Una voce va in /var/log/upstart/networking.log quando provi, che assomiglia a:

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

Ma potrebbero davvero / dovrebbero avere l'output come messaggio di dialogo quando si tenta di riavviare la rete del servizio. Ah bene. capito e persino un vecchio modo di aggirare.

EDIT: ho scoperto che questo provoca un innesco involontario dello script controllato da /etc/init/failsafe.conf che è indesiderabile in quanto provoca un ritardo di 120 secondi in ogni avvio ... e forse mascherando errori di configurazione / rete effettivi problemi che l'apparenza di questo ritardo indicherebbe, ma sta già mostrando tutto il tempo. (ad es. un cavo non collegato, che consentiva l'accesso a una condivisione di file di rete mappata in / etc / fstab, per esempio)

In ogni caso, scoprirò che cosa sta causando questo colpire sempre il timeout e pubblicherò una correzione quando lo trovo.


5
la saggezza di modificare un comportamento fondamentale del sistema operativo è discutibile.
0xF2,

Perché hanno rimosso la possibilità di riavviare? Mi piacerebbe saperlo prima di ripristinarlo.
flickerfly,

@ 0xF2 - vuoi dire questionable.
Dale Anderson,

@DaleAnderson anche quello ;-)
0xF2

3

In riferimento alla risposta di kvm-user420, sono andato avanti e ho impostato uno script per sostituire gli script di rete di Ubuntu 14.04 con quello di Ubuntu 13.10

Puoi trovarlo qui: https://github.com/metral/restore_networking

Godere!


Questo ha funzionato per me. Spero che un giorno Upstart se ne andrà via ;-)
Andrew

0

Risolvo il problema con questo script: per favore aggiungi questo script su "/etc/network/if-down.d"

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

contenuto:

#!/bin/bash 

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

e infine :

chmod +x ifdown

ora è possibile modificare l'indirizzo IP e riavviare il servizio di rete con systemctl o il comando di servizio.
NOTA : questo script è troppo semplice e NON MANEGGIARE interfacce vm, tap, bridge, ... effettivamente svuota tutte le interfacce esclude lo (loopback).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.