Làm cách nào để khởi động lại thành công một mạng mà không cần khởi động lại qua SSH?


98

Trong Ubuntu 14.04 không phải sudo service networking restartvà cũng không sudo /etc/init.d/networking restartlàm bất cứ điều gì nữa. Cả hai cũng thoát với mã 1. Một cái gì đó rõ ràng đã thay đổi (hoặc thay đổi một nửa) nhưng tôi không thể tìm thấy cái gì. Điều này rõ ràng gây ra vấn đề với cấu hình lại mạng từ xa và các công cụ như 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

Cách chính xác để khởi động lại mạng trong Ubuntu 14.04 Server từ xa là gì?


Bạn có thực sự muốn khởi động lại mạng hoặc chỉ khởi động lại một giao diện như eth0 không? Trong mọi trường hợp, nó có thể sẽ phá vỡ kết nối ssh.
chili555

1
Vì cả hai đều là tập lệnh shell, hãy lấy thông tin với sudo bash -x /usr/sbin/service networking restartsudo bash -x /etc/init.d/networking restart
waltinator

@terdon hơi ngớ ngẩn khi có một thẻ vào ngày 14.04, đặc biệt là khi mô tả nói rằng đó là bản phát hành "hiện tại" mà nó không phải là. Điều đó nói rằng, vấn đề này là hoàn toàn có thể tái tạo trong 13.10.
SimonJGreen

@ chili555 những gì tôi muốn xảy ra là để thay đổi trong / etc / mạng / giao diện có hiệu lực. Trước khi các tập lệnh này ngừng hoạt động, các kết nối SSH vẫn tồn tại trong lần khởi động lại này.
SimonJGreen

@waltinator thông tin bổ sung được thêm vào câu hỏi, cảm ơn vì lời đề nghị
SimonJGreen

Câu trả lời:


121

Hóa ra đây là một "tính năng". Cách duy nhất được hỗ trợ để khởi động lại giao diện trong Ubuntu Server làsudo ifdown eth0 && sudo ifup eth0

https://bugs.launchpad.net/ubfox/+source/ifupdown/+orms/1301015


8
Đảm bảo bạn chạy 'sudo ifdown eth0 && sudo ifup eth0' (lưu ý sudo thứ hai) nếu bạn không chạy lệnh này với quyền root
mtpettyp

3
Điều này có ổn không nếu kết nối qua ssh? Tức là cả hai lệnh sẽ chạy trước khi ngắt kết nối?
meawoppl

2
Trong trường hợp của tôi, chạy sudo service networking restartdường như đã làm mọi thứ rối tung lên. Vì vậy, tôi đã phải chạy sudo ifdown eth0 && sudo ifup eth0hai lần. Vâng, hai lần.
phân cực

@ExceptionSlayer: Không, họ không làm việc cho tôi. Tôi đã phải tắt nguồn máy chủ và bật lại (Ubuntu 14.04).
Xdg

4
Không sử dụng ;thay vì &&một lựa chọn an toàn hơn?
Isaac

72

ifdown, ifup không hoạt động với tôi (có thể hết thời gian kết nối SSH trước lệnh thứ hai). Những gì đã làm việc là:

sudo service network-manager restart

Đây là trên một hệ thống máy tính để bàn 14.04.


4
Câu trả lời được chấp nhận đã không làm việc cho tôi; cái này đã làm (Cài đặt mới ngày 14.04.1)
u2n

2
Có thể xác nhận rằng điều này hoạt động với tôi trên Trusty (Ubuntu 14.04).
gerlos

3
Câu trả lời "ifdown / ifup" không hoạt động với tôi trên Ubuntu 14.04, nhưng điều này đã làm.
dieuwe

4
Câu trả lời được chấp nhận có thể áp dụng cho Ubuntu 12.04 trở xuống. Câu trả lời này được chấp nhận cho 14.04.
Thụy Sĩ

4
Vào ngày 14.04.2 của tôi, dịch vụ này không tồn tại - khởi động lại trình quản lý mạng dịch vụ sudo.
Xdg

6

Điều thay đổi là họ không muốn bạn "nảy" mạng nữa. dừng lại, và bắt đầu, vẫn làm việc khởi động lại không còn hoạt động. Tôi chỉ "giải quyết" "vấn đề" này, nghĩa là tôi đã lấy lại hành vi cũ. Để trở lại hành vi trước: Lấy tệp 13.10 /etc/init/networking.conf và thay thế tệp 14.04 bằng tệp đó. (chỉnh sửa: làm rõ cái nào thay thế cái nào)

Quá trình này trông như thế này:

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

Thực hiện tương tự cho tập lệnh /etc/init.d/networking, đây là những gì các tham chiếu / cuộc gọi tập tin /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). 

Rõ ràng có một lý do khiến họ đặt lối thoát phòng thủ vào đó, nhưng họ không bận tâm đến việc thực sự tạo ra những gì đang diễn ra rất tốt.

Một mục nhập đi vào /var/log/upstart/networking.log khi bạn thử, có vẻ như:

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

Nhưng họ thực sự có thể / nên có đầu ra như thông báo hộp thoại khi bạn thử khởi động lại mạng dịch vụ. à tốt tìm ra nó và thậm chí một công việc cũ xung quanh.

EDIT: Tôi đã tìm thấy điều này gây ra sự vô tình kích hoạt tập lệnh được kiểm soát bởi /etc/init/failsafe.conf, điều không mong muốn vì nó gây ra sự chậm trễ thời gian 120 giây trong mỗi lần khởi động ... cũng như che giấu các cấu hình / mạng thực tế. những vấn đề mà sự xuất hiện của sự chậm trễ này sẽ chỉ ra, nhưng nó đã hiển thị mọi lúc. (ví dụ: Cáp không được cắm, cho phép truy cập vào chia sẻ tệp mạng được ánh xạ trong / etc / fstab chẳng hạn)

Trong mọi trường hợp, tôi sẽ tìm ra nguyên nhân gây ra điều này luôn luôn hết thời gian chờ và gửi một bản sửa lỗi khi tôi tìm thấy nó.


5
sự khôn ngoan của việc sửa đổi một hành vi hệ điều hành cốt lõi là điều gây tranh cãi.
0xF2

Tại sao họ loại bỏ khả năng khởi động lại? Tôi muốn biết điều đó trước khi phục hồi nó.
flickerfly

@ 0xF2 - bạn có ý nghĩa questionable.
Dale Anderson

@DaleAnderson cũng vậy ;-)
0xF2

3

Để tham khảo phản hồi của kvm-user420, tôi đã đi trước và thiết lập một tập lệnh để thay thế các tập lệnh mạng của Ubuntu 14.04 bằng tập lệnh của Ubuntu 13.10

Bạn có thể tìm thấy nó ở đây: https://github.com/metral/restore_networking

Thưởng thức!


Điều này làm việc cho tôi. Hy vọng, một ngày nào đó Upstart sẽ biến mất ;-)
Andrew

0

Tôi khắc phục sự cố với tập lệnh này: vui lòng thêm tập lệnh này vào "/etc/network/if-down.d"

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

Nội dung :

#!/bin/bash 

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

và cuối cùng :

chmod +x ifdown

bây giờ bạn có thể thay đổi địa chỉ IP và khởi động lại dịch vụ mạng bằng lệnh systemctl hoặc dịch vụ.
LƯU Ý : tập lệnh này quá đơn giản và KHÔNG XỬ LÝ các giao diện vm, tap, cầu nối, .... thực sự tuôn ra tất cả các giao diện loại trừ lo (loopback).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.