101

In Ubuntu 14.04 neither sudo service networking restart nor sudo /etc/init.d/networking restart do anything any more. They also both exit with code 1. Something has obviously changed (or half changed) but I can't find what. This obviously causes problems with remote network reconfiguration and tools like 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

What is the correct way to restart networking in Ubuntu 14.04 Server remotely?

7
  • Do you really want to restart networking or just restart an interface such as eth0? In any case, it will probably break the ssh connection.
    – chili555
    Mar 31, 2014 at 18:47
  • 1
    Since both are shell scripts, gain information with sudo bash -x /usr/sbin/service networking restart and sudo bash -x /etc/init.d/networking restart
    – waltinator
    Mar 31, 2014 at 19:43
  • @terdon bit silly to have a tag around for 14.04 then, especially as the description says it's the "current" release which it isn't. that said, this problem is totally reproducible in 13.10. Mar 31, 2014 at 21:10
  • @chili555 what I want to happen is for changes in /etc/network/interfaces to take effect. Prior to these scripts stopping working SSH connections survive this restart. Mar 31, 2014 at 21:11
  • @waltinator additional info added to question, thanks for the suggestion Mar 31, 2014 at 21:13

5 Answers 5

126

Turns out this is a "feature". The only supported way of restarting an interface in Ubuntu Server is sudo ifdown eth0 && sudo ifup eth0

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

7
  • 9
    Make sure you run 'sudo ifdown eth0 && sudo ifup eth0' (note the second sudo) if you're not running this command as root
    – mtpettyp
    Apr 30, 2014 at 20:02
  • 4
    Is this ok to do if connected via ssh? Ie, will both commands run before the disconnect?
    – meawoppl
    Jul 25, 2014 at 17:55
  • 2
    In my case, running sudo service networking restart seemed to have messed things up. So I had to run sudo ifdown eth0 && sudo ifup eth0 twice. Yes, twice.
    – polarise
    Feb 17, 2015 at 14:40
  • 5
    Isn't using a ; instead of && a safer option?
    – Isaac
    Aug 30, 2015 at 7:56
  • 1
    That bug report is quite a read! Sounds like there are a notable amount of cases not easily satisfied by this. Thanks
    – flickerfly
    Nov 11, 2015 at 16:27
73

ifdown, ifup didn't work for me (likely SSH connection timeout before the second command). What did work was:

sudo service network-manager restart

This was on a 14.04 ubuntu-desktop system.

10
  • 4
    Accepted answer didn't work for me; this one did. (Fresh install of 14.04.1)
    – u2n
    Aug 24, 2014 at 12:18
  • 2
    Can confirm that this works for me on Trusty (Ubuntu 14.04).
    – gerlos
    Sep 29, 2014 at 18:15
  • 3
    The "ifdown/ifup" answer did not work for me either on Ubuntu 14.04, but this did.
    – dieuwe
    Sep 29, 2014 at 21:26
  • 4
    The accepted answer is applicable for Ubuntu 12.04 and lower. This answer is acceptable for 14.04.
    – Swiss
    Dec 12, 2014 at 23:24
  • 4
    On my 14.04.2 this service does not exist - sudo service network-manager restart.
    – Xdg
    Mar 1, 2015 at 14:51
6

What's changed is they don't want you "bouncing" the network anymore. stopping, and starting, still work. restart no longer works. I just "solved" this "problem", that is to say I got the old behavior back. To revert to prior behavior: Take a 13.10 /etc/init/networking.conf file and replace the 14.04 file with it. (edit: clarified which replaces which)

The process looks like this:

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

Do the same for /etc/init.d/networking script, which is what the /etc/init/networking.conf file references/calls.

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

Obviously there's a reason they put a defensive exit in there, but they don't bother to really output what's going on very well.

An entry does go into /var/log/upstart/networking.log when you try, that looks like:

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

But they really could/should have output that as the dialog message when you try service networking restart. ah well. figured it out and even a old-way work around.

EDIT: I have found this causes an unintentional triggering of the script controlled by /etc/init/failsafe.conf which is undesirable as it causes a 120 second timeout delay in every boot up... as well as perhaps masking actual misconfigurations/network issues which this delay's appearance would indicate, but it's already showing all the time. (e.g. An unplugged cable, which was allowing access to a network file share mapped in /etc/fstab, for instance)

In any case, I will figure out what is causing this always hitting the timeout, and post a fix when I find it.

4
  • 5
    the wisdom of modifying a core OS behavior is debatable.
    – 0xF2
    Jan 5, 2015 at 14:34
  • Why did they remove the ability to restart? I'd like to know that before reinstating it.
    – flickerfly
    Nov 11, 2015 at 15:53
  • @0xF2 - you mean questionable. Nov 4, 2016 at 16:46
  • @DaleAnderson that too ;-)
    – 0xF2
    Nov 6, 2016 at 0:20
3

In reference to kvm-user420's response, I've gone ahead and setup a script to replace Ubuntu 14.04's networking scripts with that of Ubuntu 13.10

You can find it here: https://github.com/metral/restore_networking

Enjoy!

1
  • This worked for me. Hopefully, one day Upstart will just go away ;-)
    – Andrew
    Feb 6, 2015 at 22:57
0

I fix problem with this script : please add this script on "/etc/network/if-down.d"

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

content :

#!/bin/bash 

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

and finally :

chmod +x ifdown

now you can change ip address and restart networking service with systemctl or service command .
NOTE : this script is too simple and DO NOT HANDLE vm,tap,bridge,... interfaces . actually flush all interfaces exclude lo (loopback) .

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .