SSH를 통해 재부팅하지 않고 네트워크를 성공적으로 다시 시작하는 방법은 무엇입니까?


98

우분투 14.04에서는 더 이상 아무것도 하지 sudo service networking restart않습니다 sudo /etc/init.d/networking restart. 그들은 또한 코드 1로 종료합니다. 무언가 분명히 변경되었거나 반은 바뀌었지만 무엇을 찾을 수 없습니다. 이로 인해 원격 네트워크 재구성 및 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

Ubuntu 14.04 Server에서 원격으로 네트워킹을 다시 시작하는 올바른 방법은 무엇입니까?


네트워킹을 다시 시작 하시겠습니까, 아니면 eth0과 같은 인터페이스를 다시 시작 하시겠습니까? 어쨌든 ssh 연결이 끊어 질 수 있습니다.
chili555

1
둘 다 쉘 스크립트이기 때문에 다음 sudo bash -x /usr/sbin/service networking restart과 같은 정보를 얻을 수 있습니다.sudo bash -x /etc/init.d/networking restart
Waltinator

@ terdon 비트 어리석은 14.04에 대해 태그를 갖는 것은 특히 설명에서 알 수 있듯이 "현재"릴리스가 아닙니다. 즉,이 문제는 13.10에서 완전히 재현 가능합니다.
SimonJGreen

@ chili555 내가하고 싶은 것은 / etc / network / interfaces의 변경 사항이 적용되는 것입니다. 이러한 스크립트가 작동을 멈추기 전에 SSH 연결은이 재시작 후에도 유지됩니다.
SimonJGreen

@waltinator 추가 정보가 추가되었습니다. 제안 해 주셔서 감사합니다
SimonJGreen

답변:


121

이것이 "기능"으로 밝혀졌습니다. 유일한 우분투 서버가에서 인터페이스를 다시 시작의 지원 방법sudo ifdown eth0 && sudo ifup eth0

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


8
이 명령을 root로 실행하지 않으면 'sudo ifdown eth0 && sudo ifup eth0'(두 번째 sudo 참고)을 실행하십시오.
mtpettyp

3
ssh를 통해 연결된 경우에도 괜찮습니까? 즉, 두 명령이 연결 해제 전에 실행됩니까?
meawoppl

2
제 경우에는 달리기 sudo service networking restart가 일을 망쳐 놓은 것 같습니다. 그래서 나는 sudo ifdown eth0 && sudo ifup eth0두 번 달렸다 . 예, 두 번
편광

@ExceptionSlayer : 아니요, 그들은 나를 위해 작동하지 않았습니다. 서버 전원을 끄고 다시 켜야했습니다 (Ubuntu 14.04).
Xdg

4
더 안전한 옵션 ;대신 사용하지 &&않습니까?
Isaac

72

ifdown, ifup이 작동하지 않았습니다 (두 번째 명령 이전의 SSH 연결 시간 초과). 일한 것은 :

sudo service network-manager restart

이것은 14.04 우분투 데스크탑 시스템에있었습니다.


4
받아 들여진 대답은 저에게 효과가 없었습니다. 이건 (14.04.1의 새로 설치)
u2n

2
이것이 Trusty (Ubuntu 14.04)에서 작동하는지 확인할 수 있습니다.
gerlos

3
"ifdown / ifup"답변은 우분투 14.04에서도 작동하지 않았지만 이것은 효과가있었습니다.
dieuwe

4
허용 된 답변은 Ubuntu 12.04 이하에 적용됩니다. 이 답변은 14.04에 허용됩니다.
스위스

4
내 14.04.2에는이 서비스가 없습니다-sudo service network-manager restart.
Xdg

6

변경된 것은 더 이상 네트워크를 "수신 거부"하기를 원하지 않는다는 것입니다. 멈추고 시작해도 여전히 작동합니다. 재시작이 더 이상 작동하지 않습니다. 방금이 "문제"를 "해결"했습니다. 즉, 이전 동작을 다시 받았습니다. 이전 동작으로 되돌리려면 13.10 /etc/init/networking.conf 파일을 가져 와서 14.04 파일을 바꾸십시오. (편집 : 어느 것을 대체하는지 명확히 함)

프로세스는 다음과 같습니다.

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

/etc/init.d/networking 스크립트에 대해서도 동일하게 수행하십시오. 이는 /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). 

분명히 그들이 거기에 방어 출구를 두는 이유가 있지만, 실제로 진행되고있는 것을 실제로 출력하지 않아도됩니다.

시도하면 항목이 /var/log/upstart/networking.log로 이동합니다.

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

그러나 서비스 네트워킹을 다시 시작할 때 대화 상자 메시지로 출력 할 수 있습니다. 아 잘. 그것을 알아 내고 심지어는 오래된 방법으로 해결했습니다.

편집 : 나는 이것이 /etc/init/failsafe.conf에 의해 제어되는 스크립트의 의도하지 않은 트리거를 유발한다는 것을 알았습니다. 매번 부팅 할 때마다 120 초의 시간 초과 지연이 발생하고 실제 잘못된 구성 / 네트워크를 숨길 수 있기 때문에 바람직하지 않습니다 이 지연이 나타나는 문제는 이미 항상 표시되고 있습니다. (예 : / etc / fstab에 매핑 된 네트워크 파일 공유에 대한 액세스를 허용하는 플러그가 뽑힌 케이블)

어쨌든, 이것이 항상 타임 아웃에 도달하는 원인을 파악하고 내가 발견하면 수정 사항을 게시합니다.


5
핵심 OS 행동을 수정하는 지혜는 논란의 여지가있다.
0xF2

다시 시작하는 기능을 제거한 이유는 무엇입니까? 복원하기 전에 알고 싶습니다.
flickerfly

@ 0xF2-당신은 의미한다 questionable.
데일 앤더슨

@DaleAnderson 저것도 ;-)
0xF2

3

kvm-user420의 응답과 관련하여 Ubuntu 14.04의 네트워킹 스크립트를 Ubuntu 13.10의 네트워킹 스크립트로 대체하는 스크립트를 설정했습니다.

https://github.com/metral/restore_networking에서 찾을 수 있습니다.

즐겨!


이것은 나를 위해 일했습니다. 바라건대, 어느 날 Upstart가 사라질 것입니다 ;-)
Andrew

0

이 스크립트로 문제를 해결했습니다 : "/etc/network/if-down.d"에이 스크립트를 추가하십시오

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

내용 :

#!/bin/bash 

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

그리고 마지막으로 :

chmod +x ifdown

이제 systemctl 또는 service 명령으로 IP 주소를 변경하고 네트워킹 서비스를 다시 시작할 수 있습니다.
참고 :이 스크립트는 너무 간단하며 vm, tap, bridge, ... 인터페이스를 처리 하지 마십시오 . 실제로 모든 인터페이스를 플러시하면 lo (loopback) 제외됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.