Bagaimana cara sukses me-restart jaringan tanpa mem-boot ulang melalui SSH?


98

Di Ubuntu 14.04 tidak sudo service networking restartjuga tidak sudo /etc/init.d/networking restartmelakukan apa-apa lagi. Mereka juga keluar dengan kode 1. Sesuatu telah jelas berubah (atau setengah berubah) tetapi saya tidak dapat menemukan apa. Ini jelas menyebabkan masalah dengan konfigurasi ulang jaringan jarak jauh dan alat-alat seperti 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

Apa cara yang benar untuk memulai kembali jaringan di Ubuntu 14.04 Server dari jarak jauh?


Apakah Anda benar-benar ingin me-restart jaringan atau hanya me-restart antarmuka seperti eth0? Bagaimanapun, itu mungkin akan memutuskan koneksi ssh.
chili555

1
Karena keduanya adalah skrip shell, dapatkan informasi dengan sudo bash -x /usr/sbin/service networking restartdansudo bash -x /etc/init.d/networking restart
waltinator

@terdon agak konyol untuk memiliki tag sekitar untuk 14,04 kemudian, terutama karena deskripsi mengatakan itu adalah rilis "saat ini" yang bukan. yang mengatakan, masalah ini benar-benar dapat direproduksi pada 13.10.
SimonJGreen

@ chili555 apa yang saya inginkan terjadi adalah agar perubahan di / etc / network / interfaces berlaku. Sebelum skrip ini berhenti bekerja koneksi SSH bertahan hidup dengan restart ini.
SimonJGreen

@waltinator info tambahan ditambahkan ke pertanyaan, terima kasih atas sarannya
SimonJGreen

Jawaban:


121

Ternyata ini adalah "fitur". Satu- satunya cara yang didukung untuk me-restart antarmuka di Server Ubuntu adalahsudo ifdown eth0 && sudo ifup eth0

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


8
Pastikan Anda menjalankan 'sudo ifdown eth0 && sudo ifup eth0' (perhatikan sudo kedua) jika Anda tidak menjalankan perintah ini sebagai root
mtpettyp

3
Apakah ini boleh dilakukan jika terhubung melalui ssh? Yaitu, apakah kedua perintah akan berjalan sebelum diputuskan?
meawoppl

2
Dalam kasus saya, berlari sudo service networking restartsepertinya telah mengacaukan segalanya. Jadi saya harus berlari sudo ifdown eth0 && sudo ifup eth0dua kali. Ya dua kali.
polarisasi

@ExceptionSlayer: Tidak, mereka tidak bekerja untuk saya. Saya harus mematikan server secara fisik dan menyalakannya lagi (Ubuntu 14.04).
Xdg

4
Bukankah menggunakan opsi ;bukan &&yang lebih aman?
Isaac

72

ifdown, ifup tidak bekerja untuk saya (kemungkinan timeout koneksi SSH sebelum perintah kedua). Apa yang berhasil adalah:

sudo service network-manager restart

Ini adalah pada sistem ubuntu-desktop 14,04.


4
Jawaban yang diterima tidak berhasil untuk saya; yang ini. (Instalasi baru 14.04.1)
u2n

2
Dapat mengkonfirmasi bahwa ini berfungsi untuk saya di Trusty (Ubuntu 14.04).
gerlos

3
Jawaban "ifdown / ifup" tidak bekerja untuk saya di Ubuntu 14.04, tetapi ini berhasil.
dieuwe

4
Jawaban yang diterima berlaku untuk Ubuntu 12,04 dan lebih rendah. Jawaban ini dapat diterima untuk 14,04.
Swiss

4
Pada 14.04.2 saya layanan ini tidak ada - sudo service-manager jaringan restart.
Xdg

6

Apa yang berubah adalah mereka tidak ingin Anda "memantulkan" jaringan lagi. berhenti, dan mulai, masih bekerja. restart tidak lagi berfungsi. Saya hanya "memecahkan" "masalah" ini, artinya saya mendapatkan kembali perilaku lama. Untuk kembali ke perilaku sebelumnya: Ambil file 13.10 /etc/init/networking.conf dan ganti file 14,04 dengannya. (edit: diklarifikasi yang menggantikan yang mana)

Prosesnya terlihat seperti ini:

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

Lakukan hal yang sama untuk skrip /etc/init.d/networking, yang merupakan referensi / panggilan file /etc/init/networking.conf.

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

Jelas ada alasan mereka menempatkan pertahanan di sana, tetapi mereka tidak repot-repot untuk benar-benar menampilkan apa yang terjadi dengan sangat baik.

Entri masuk ke /var/log/upstart/networking.log ketika Anda mencoba, yang terlihat seperti:

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

Tetapi mereka benar-benar bisa / harus memiliki output itu sebagai pesan dialog ketika Anda mencoba restart jaringan layanan. ah baiklah. menemukan jawabannya dan bahkan cara lama bekerja.

EDIT: Saya telah menemukan ini menyebabkan pemicu yang tidak disengaja dari skrip yang dikendalikan oleh /etc/init/failsafe.conf yang tidak diinginkan karena menyebabkan penundaan waktu tunggu 120 detik pada setiap boot up ... serta mungkin menutupi kesalahan konfigurasi / jaringan yang sebenarnya masalah yang akan ditunjukkan oleh penampilan penundaan ini, tetapi sudah muncul sepanjang waktu. (mis. Kabel yang tidak terhubung, yang memungkinkan akses ke berbagi file jaringan yang dipetakan di / etc / fstab, misalnya)

Bagaimanapun, saya akan mencari tahu apa yang menyebabkan ini selalu mengenai batas waktu, dan memposting perbaikan ketika saya menemukannya.


5
kebijaksanaan memodifikasi perilaku inti OS masih bisa diperdebatkan.
0xF2

Mengapa mereka menghapus kemampuan untuk memulai kembali? Saya ingin mengetahuinya sebelum mengembalikannya.
flickerfly

@ 0xF2 - maksud Anda questionable.
Dale Anderson

@DaleAnderson juga ;-)
0xF2

3

Mengacu pada tanggapan kvm-user420, saya telah melanjutkan dan menyiapkan skrip untuk mengganti skrip jaringan Ubuntu 14.04 dengan skrip Ubuntu 13.10

Anda dapat menemukannya di sini: https://github.com/metral/restore_networking

Nikmati!


Ini berhasil untuk saya. Mudah-mudahan, suatu hari Pemula baru akan pergi ;-)
Andrew

0

Saya memperbaiki masalah dengan skrip ini: tambahkan skrip ini di "/etc/network/if-down.d"

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

konten:

#!/bin/bash 

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

dan akhirnya :

chmod +x ifdown

sekarang Anda dapat mengubah alamat ip dan memulai kembali layanan jaringan dengan systemctl atau perintah layanan.
CATATAN : skrip ini terlalu sederhana dan JANGAN MENANGANI antarmuka, ketuk, jembatan, .... sebenarnya flush semua interface mengecualikan lo (loopback).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.