我在 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 来接收更改通知,但很少有程序这样做。)