如何在不通过SSH重启的情况下成功重启网络?


98

在Ubuntu 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
由于两者都是shell脚本,以获取信息sudo bash -x /usr/sbin/service networking restartsudo bash -x /etc/init.d/networking restart
waltinator

@terdon有点傻,然后在14.04左右有一个标签,特别是因为描述说它不是“当前”版本。也就是说,此问题在13.10中完全可以重现。
SimonJGreen

@ chili555我想发生的是使/ etc / network / interfaces中的更改生效。在这些脚本停止正常工作之前,SSH连接在重新启动后仍然有效。
SimonJGreen

@waltinator向问题添加了更多信息,谢谢您的建议
SimonJGreen 2014年

Answers:


121

原来这是一个“功能”。在Ubuntu Server中重启接口的唯一受支持方法是sudo ifdown eth0 && sudo ifup eth0

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


8
如果您没有以root用户
身份

3
通过ssh连接可以吗?即,两个命令都将在断开连接之前运行吗?
meawoppl

2
就我而言,跑步sudo service networking restart似乎使事情变得混乱。所以我不得不跑sudo ifdown eth0 && sudo ifup eth0两次。是的,两次。
极化

@ExceptionSlayer:不,他们没有为我工作。我必须物理关闭服务器电源,然后再次打开它(Ubuntu 14.04)。
Xdg 2015年

4
是不是使用;而不是&&更安全的选择?
以撒

72

ifdown,ifup对我不起作用(第二条命令之前SSH连接超时)。起作用的是:

sudo service network-manager restart

这是在14.04 ubuntu桌面系统上。


4
接受的答案对我不起作用;这个做了。(新安装的14.04.1版本)
u2n 2014年

2
可以在Trusty(Ubuntu 14.04)上确认对我有用。
盖洛斯2014年

3
在Ubuntu 14.04上,“ ifdown / ifup”答案对我也不起作用,但是可以。
dieuwe 2014年

4
接受的答案适用于Ubuntu 12.04及更低版本。14.04可接受此答案。
瑞士

4
在我的14.04.2上,此服务不存在-sudo服务network-manager重新启动。
Xdg 2015年

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
修改核心操作系统行为的智慧值得商bat。
0xF2 2015年

他们为什么取消重新启动的功能?在恢复之前,我想知道这一点。
flickerfly 2015年

@ 0xF2-您的意思是questionable
戴尔·安德森

@DaleAnderson那也;-)
0xF2


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

现在,您可以更改IP地址并使用systemctl或service命令重新启动网络服务。
注意:此脚本太简单了,请勿处理 vm,tap,bridge,...接口。实际上刷新所有接口,排除lo(loopback)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.