我们有一台装有 Linux CentOS 发行版的服务器。自从我们上次重新启动以来,它在一个月内以某种方式丢失了其主机名。上周我们运行了一个 ETL(提取、转换、加载)作业,该过程的一部分在将数据移动到数据库之前停止了 JBoss,然后自动重新启动 JBoss。重启失败。
我使用这种方法解决了(通过黑客):
上个月我们没有对服务器进行任何更改(对任何文件),所以我知道 /etc/hosts 不会更改。我在 /etc/hosts 文件中添加了额外的一行(在上面的答案中),以便 JBoss 可以启动。
两个问题:
根据这个问题,“hostname -f”命令如何从 DNS 检索主机名?它对我们的 DNS 检查什么?我应该使用一个术语来与我们的服务器团队沟通吗?
大多数服务器管理员如何处理这个问题,或者避免发生在我身上的事情?他们是否总是在 /etc/hosts 文件中设置某些内容以避免更改 DNS?
基本上我试图找出我们的网络(或 DNS)上发生了什么变化导致我们的主机名丢失。看,当我登录时,命令提示符显示服务器上的主机名。奇怪的是,我在那里看到它,但当我调用“hostname -f”时却没有。请参阅下面的“lvs-xyz”。
[root@lvs-xyz ~]# hostname -f
hostname: Unknown host
如果您不能回答我的所有问题,我主要是在寻找“规范”,以避免丢失 Linux 管理的主机名。如果我将它放入 /etc/hosts 中,那么它看起来像是一个 hack,因为如果 kernal 值发生变化,命令提示符可能会发生变化,如果发生这种情况,它将与 /etc/hosts 不同。
编辑:
[root@lvs-xyz sysconfig]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
NETWORK=144.92.154.0
IPADDR=144.92.154.48
NETMASK=255.255.255.192
答案1
您可以用一行指定它(无论如何都会在重新启动时加载)/etc/sysconfig/network
(HOSTNAME=
请参阅文档这里)
通常您应该将其指定为完全限定名称。
如果主机还没有名称,并且您正在使用 DHCP,它通常会以这种方式选择其名称。
答案2
有几个地方存储主机名:
- 在内核中(/proc/sys/kernel/hostname)
- 在系统中
- 在/etc/主机名中
- 在 /etc/hosts 中
- 可能是其他(Dbus?)
到目前为止,我发现改变它们的最快方法是:
sudo hostnamectl set-hostname $new_hostname
sudo vi /etc/hosts (updating the hostname for the host's ip)
hostname -f (check your work)
该命令/usr/bin/hostname $new_hostname
仅更改内核的主机名 (AFAICT)。
之后,重新启动缓存旧主机名的任何长时间运行的程序,或者接受它们将继续使用它。
编辑:有一些身份验证模块使用主机名向中央身份验证服务器注册。如果主机名发生更改,则必须重新注册或重新安装。我想到的是 SSSD,以及与 Kerberos 相关的任何内容。