How do I rename a Linux host without needing to reboot for the rename to take effect?
Solution 1
You can change the kernel's idea of the hostname on a systemd-based system using the hostnamectl
tool. For example:
hostnamectl set-hostname whatever
You can view the system's current idea of the hostname with:
hostnamectl # equivalent to hostnamectl status
Keep in mind that this does not change a running process's idea of the hostname. Such a process would have to check the hostname again in order to be updated, and almost no process does. Thus such a process would need to be restarted. In order for every process to begin using the new hostname, they must be restarted. It's generally easier to just reboot the system than to restart every service individually.
Solution 2
You can change the in-kernel hostname using:
hostname NEWNAME
On Linux this is practically equal to either of the following:
sysctl kernel.hostname=NEWNAME
echo NEWNAME > /proc/sys/kernel/hostname
This does not depend on systemd (unlike hostnamectl which requires systemd-hostnamed) or any other non-standard tools, and often (especially in shellscript-init systems) is how the initial hostname was set in the first place.
Most programs and services don't actually use the hostname; the few which do (e.g. Postfix or services using Kerberos) can be restarted one-by-one.
(Some programs cache the hostname until restart, others query it every time they need it. Programs also have the ability to poll(2) /proc/sys/kernel/hostname to receive change notifications, but few do.)
Related videos on Youtube
![Peter Jirak Eldritch](https://i.stack.imgur.com/mFzbe.jpg?s=256&g=1)
Peter Jirak Eldritch
Updated on September 18, 2022Comments
-
Peter Jirak Eldritch almost 2 years
I searched for an answer to this question on serverfault and could not find it. I know it is possible, but I can't remember how to do it. How do I change a Linux host's hostname and get that change to take effect without a reboot?
I am using Ubuntu 16 and Ubuntu 18.
A big feature of Ubuntu is the graphical desktop and graphical system utilities. However, we are running Ubuntu in our production environment so we chose not to use the graphical desktop or utilities in order not to have those features consume resources we need in our production environment.
I know that to rename the host, I edit the files:
/etc/hostname
/etc/hosts
In the
/etc/hostname
one just replaces the current hostname (soon to be former hostname) with the new hostname.Ubuntu in the
/etc/hosts
file has the line:127.0.1.1 your-hostname your-hostname
It acts as bootstrapping while your host is booting up and establishing itself within your network. Prior to changing the hostname,
your-hostname
is the current (soon to be former hostname) and as a part of changing your host's hostname, one replaces that name with the new name.What I am familiar with is executing the above two steps and then rebooting your host. But plenty of times, like with a production server, one would like to execute that rename, but not reboot one's host.
How can I change hostname on a host and get that change to take effect without rebooting the host?
-
pipe about 5 yearsThere's no such thing as "Ubuntu 16" and "Ubuntu 18", there can be as big differences between 16.04 and 16.10 as there are between 16.10 and 17.04.
-
Peter Jirak Eldritch over 5 yearsDo I need to restart networking on my server if I do not wish to reboot it after the rename? I found this:
sudo /etc/init.d/network restart
Aside from that, restarting networking on my server via that command your point about restarting any running process that needs to know the server's name is valid. Agreed that restarting the host would fix that. That said, there are times that I really want to rename a host, but really do not want to reboot it. Any opinion aboutsudo /etc/init.d/network restart
and its usefulness in getting the new hostname to take effect w\out reboot? -
user1686 over 5 years@PeterJirak: Completely useless. If those programs (which need to know the hostname) didn't bother to watch for hostname updates before, then they won't bother now. Telling the system to reconfigure IP addresses on eth0 won't affect that even a little bit.
-
Michael Hampton over 5 years@PeterJirak What do you mean by "getting the new hostname to take effect"? As previously discussed, it takes effect immediately, and any newly started process will be aware of it. I also don't understand why you're asking about restarting the network? What does that have to do with the hostname?
-
user1686 over 5 yearsIt's a common misconception that the entirety of "networking" is a userspace service that can be restarted, just because there's an /etc/init.d script named like that.
-
rexkogitans about 5 years@PeterJirak As a side note, running services in
/etc/init.d
is the wrong way on systemd systems. It is just there for backward compatibility to the old System V. -
Michael Hampton about 5 yearsKeep in mind that these methods are not persistent and will not survive a reboot.
-
user1686 about 5 yearsFortunately, OP has already covered persistence in their question itself.
-
Mark Plotnick about 5 yearspostfix may have the host name hard coded in one or two places in
/etc/postfix/main.cf
and/etc/mailname
, so those will need to be edited, too. -
Aaron Hudon about 5 yearsAnd just for completeness, the external world might not care about the hostname at all, you would need to change DNS for beeing reachable under a different name or mapping the IP to a different name.