如何重命名 Linux 主机而无需重新启动以使重命名生效?

如何重命名 Linux 主机而无需重新启动以使重命名生效?

我在 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

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

hostnamectl set-hostname whatever

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

hostnamectl             # equivalent to hostnamectl status

请记住,这不会改变正在运行的进程对主机名的看法。这样的进程必须再次检查主机名才能更新,而且几乎没有进程会这样做。因此,这样的进程需要重新启动。为了每一个进程开始使用新主机名时,必须重新启动它们。通常,重新启动系统比单独重新启动每个服务更简单。

答案2

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

hostname NEWNAME

在 Linux 上,这实际上等同于以下任一项:

sysctl kernel.hostname=NEWNAME

echo NEWNAME > /proc/sys/kernel/hostname

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

大多数项目和服务实际上并没有使用主机名;少数可以重新启动的(例如 Postfix 或使用 Kerberos 的服务)可以逐个重新启动。

(有些程序会缓存主机名直到重新启动,其他程序则会在每次需要时查询它。程序也可以通过轮询(2)/proc/sys/kernel/hostname 来接收更改通知,但很少有程序这样做。)

相关内容