如何重命名Linux主机而无需重新引导才能使重命名生效?


26

我在serverfault上搜索了此问题的答案,但找不到它。我知道这是可能的,但我不记得该怎么做。如何更改Linux主机的主机名,并使该更改在不重新启动的情况下生效?

我正在使用Ubuntu 16和Ubuntu 18。

Ubuntu的一大功能是图形桌面和图形系统实用程序。但是,我们在生产环境中运行Ubuntu,因此我们选择不使用图形桌面或实用程序,以免这些功能消耗生产环境中所需的资源。

我知道要重命名主机,请编辑文件:

  • /etc/hostname
  • /etc/hosts

/etc/hostname其中,只需用新的主机名替换当前的主机名(很快将是以前的主机名)。

Ubuntu在/etc/hosts文件中具有以下行:

127.0.1.1 your-hostname your-hostname

它在主机启动并在网络中建立自身时充当引导程序。在更改主机名之前,your-hostname是当前主机名(即将是以前的主机名),并且作为更改主机的主机名的一部分,将主机名替换为新名称。

我熟悉的是执行上述两个步骤,然后重新启动主机。但是很多时候,例如在生产服务器上,人们想执行该重命名,但不重启主机。

如何更改主机上的主机名,并使该更改在不重新引导主机的情况下生效?


1
没有“ Ubuntu 16”和“ Ubuntu 18”这样的东西,16.04和16.10之间的差异可能与16.10和17.04之间的差异一样大。

Answers:


49

您可以使用该hostnamectl工具在基于systemd的系统上更改内核的主机名概念。例如:

hostnamectl set-hostname whatever

您可以使用以下命令查看系统当前的主机名概念:

hostnamectl             # equivalent to hostnamectl status

请记住,这不会改变正在运行的进程对主机名的想法。这样的过程将不得不再次检查主机名以进行更新,并且几乎没有过程进行。因此,将需要重新启动该过程。为了使每个进程开始使用新的主机名,必须重新启动它们。通常,仅重新启动系统要比单独重新启动每个服务容易。


1
如果我不想在重命名后重新启动网络,是否需要在服务器上重新启动网络?我发现了这一点: sudo /etc/init.d/network restart 除此之外,通过该命令重新启动服务器上的网络,这是有关重新启动任何需要知道服务器名称有效的正在运行的进程的要点。同意重启主机可以解决该问题。就是说,有时候我确实想重命名主机,但是真的不想重新启动它。是否有任何意见sudo /etc/init.d/network restart及其在使新主机名在不重启的情况下生效的有用性?
Peter Jirak Eldritch

3
@PeterJirak:完全没用。如果那些程序(需要知道主机名)以前没有打扰过看主机名更新,那么它们现在就不会打扰。告诉系统重新配置eth0上的IP地址不会影响到一点。
grawity

@PeterJirak“使新主机名生效”是什么意思?如前所述,它立即生效,任何新启动的进程都将意识到这一点。我也不明白您为什么要问有关重启网络的问题?这与主机名有什么关系?
迈克尔·汉普顿

5
一个普遍的误解是,整个“网络”都是可以重新启动的用户空间服务,只是因为有一个名为/etc/init.d的脚本。
grawity

2
@PeterJirak作为一个附带说明,/etc/init.d在systemd系统上以错误的方式运行服务。它只是那里的老系统V.向后兼容性
rexkogitans

22

您可以使用以下命令更改内核中的主机名:

hostname NEWNAME

在Linux上,这实际上等于以下任何一个:

sysctl kernel.hostname=NEWNAME

echo NEWNAME > /proc/sys/kernel/hostname

这不依赖于systemd(不同于hostnamectl,它需要systemd-hostnamed)或任何其他非标准工具,并且通常(尤其是在shellscript-init系统中)是最初设置主机名的方式。

大多数程序和服务实际上并不使用主机名。少数几个可以重新启动(例如Postfix或使用Kerberos的服务)。

(某些程序会缓存主机名,直到重新启动为止,其他程序会在每次需要时查询它。程序还具有poll(2)/ proc / sys / kernel / hostname来接收更改通知的能力,但很少有。)


2
请记住,这些方法不是持久性的,并且在重启后将无法生存。
迈克尔·汉普顿

3
幸运的是,OP已经在他们的问题本身中涵盖了持久性。
grawity

1
postfix可能在/etc/postfix/main.cf和中的一两个位置对主机名进行了硬编码 /etc/mailname,因此也需要对其进行编辑。
Mark Plotnick
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.