How do I rename a Linux host without needing to reboot for the rename to take effect?
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?
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.
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.)