在工作中,我使用托管在 Amazon EC2 实例上的 Ubuntu 服务器开发一个小型网站。我们有两个网络服务器,在任何给定时间,其中一个是“实时”,一个是“测试”,但是当我们在“测试”服务器上运行新功能或错误修复时,我们运行一个脚本,该脚本使用AWS API 用于交换分配给两个盒子的 IP 地址,以便交换两个服务器所服务的域。
因此,在任何给定时刻,这些服务器之一可以是我们的“实时”服务器或“测试”服务器,但这些都不是永久状态。
为了避免在 SSH 连接到这两个服务器时出现混淆,特别是如果某个愚蠢的人(比如我)长时间打开 SSH 会话并对它们所在的服务器感到困惑,我想修改这两个服务器的主机名以便终端窗口中的提示和标题将被读取ubuntu@ourwebsiteLIVE
或ubuntu@ourwebsiteTESTING
取决于服务器当前是否处于活动状态或测试状态。
我知道我可以通过hostname ourwebsiteLIVE
在我们的 IP 交换脚本中运行等来做到这一点,并且已经实现了这一点。它有效,但现在每次我sudo
在我们的服务器上打印任何内容时,它都会打印例如
sudo:无法解析主机 ourwebsiteLIVE
这似乎没有破坏任何东西,但相当令人恼火。我认为,如果我尝试将通过管道输出的命令链接起来,将来也可能会破坏一些东西,所以我想这在技术上不仅仅是一个美观问题。
我见过的“无法解析主机名”消息的所有解决方案都涉及修改/etc/hosts
或一些类似的文件然后重新启动服务器。我可以看到这对于许多用例来说都很好,但对我们来说远非理想,因为我们正在以编程方式例行修改主机名;我们不想每次运行交换脚本时都必须等待重新启动。
有没有一种方法可以让错误消息消失而无需重新启动?
答案1
我建议使用nss-我的主机名。它是一个 nss 插件,总是解析您当前的主机名,因此无需修改/etc/hosts
.
由于您描述的问题只是解析器问题,您可以通过正确的 DNS 设置来修复它,即ourwebsiteLIVE.$DOMAIN
仅解析到计算机的 IP。
答案2
我知道我要把这个问题起死回生,但目前(至少在 Ubuntu Server 16.04 中)您可以执行以下操作来更新主机名,而无需重新启动。
首先使用新主机名编辑 /etc/hosts 和 /etc/hostname
运行命令
systemctl restart systemd-logind.service
hostnamectl --static --transient --pretty set-hostname YOURHOSTNAME
您的新主机名现在无需重新启动即可激活,当然在重新启动后仍将保留。
答案3
一个快速的解决方法可能是在不重新启动的情况下hostname ourwebsiteLIVE
进行编辑,/etc/hosts
错误应该消失。
答案4
咳咳...动态更改服务器的主机名可能会导致许多系统守护程序发生故障,而且通常不会立即显现出来。操作系统期望主机名在系统安装时设置并保持不变。hostname
几乎总是在进程启动时仅检查一次。然而,还有其他方法可以动态切换版本......
最简单的方法是使用以下命令设置间接级别符号链接...
为此,您不需要两台服务器。相反,在与网站的“主”目录(即,等)相同的目录级别上,/var/www
为hosted/server/html
网站的每个版本创建一个目录,如下所示...
.../
.../v1.0
.../v1.1a
.../v1.1b
:
和v1.1a
将v1.1b
交替显示“LIVE”和“TEST”。
这里来了间接...
创建符号链接非常快,因此当您想要在轻负载下与站点交换版本而不会造成太多中断时,您可以重新创建它们。
我所基于的托管服务要求网站“home”目录为“html”,如下所示...
/home/group/subgroup/myuserid/html
因此,我们将html
服务提供给我们的目录重命名为版本目录v1.1a
,并创建一个名为 的符号链接html
。
设置符号链接后,目录列表可能看起来像......
.../
.../TEST -> v1.1b
.../html -> v1.1a
.../v1.0
.../v1.1a
.../v1.1b
在对目录中的网站文件进行更改后.../v1.1b
,我们运行一个脚本来删除(Ubuntu 有一个更安全的unlink
命令)并重新创建符号链接,其中交换了“html”和“TEST”,如下所示...
.../
.../TEST -> v1.1a
.../html -> v1.1b
.../v1.0
.../v1.1a
.../v1.1b
希望这可以帮助。
2013-02-16 18:15:12 EST 补充...
今天的研究表明,对此似乎存在很多相互矛盾的观点。
我自己的经验来自于在更改主机名后花费大量时间恢复 Xwindows 和 Ubuntu“zeroconfig”功能,正如我在该事件中的一些笔记所表明的那样......
- Ubuntu-10.04
网
- 截至 2011 年 5 月更新,网络设置要求发生了巨大变化,以支持 Zeroconf!
遇到的主要问题与“主机名”命令有关。
- Ubuntu 用于维护主机名、IP 地址等的方法已发生变化。
- /etc/hostname 和 /etc/hosts 文件现在是所有这些值的权限
- /etc/hosts 中的主机不能再有多个别名
- 在 /etc/hosts 中,第一个名称应该是完全限定域名 (FQDN)——换句话说,主机名.域名。
SSH 现在发送 FQDN 而不仅仅是主机名,因此 /etc/hosts.allow 必须从...更改
全部:本地
到..
全部:本地 *.DORIS
摘自http://www.oldapps.com/linux/ubuntu.php?old_ubuntu=35?changelog...
'即使存在 .local 域,Avahi 也将始终启动。 avahi-daemon 软件包实现了 mDNS“zeroconf”标准,以前包含一项检查,以避免在存在冲突的 .local DNS 域时运行,因为据报道,一些 ISP 在其网络上宣传这样的 .local 域,从而导致Ubuntu 主机无法看到本地网络上公布的名称 (327362)。在 Ubuntu 9.10 中,avahi-daemon 无论如何都会启动。这可能会导致其他问题。如果您的网络是这样配置的,您可以使用以下命令禁用 mDNS:'
sudo 停止 avahi-daemon sudo sed -e '/^start/,+1s/^/#/' /etc/init/avahi-daemon.conf
几篇相关文章...
临近年底Linux 主机名配置是对 Xwindow 注意事项的讨论
IBM.com 上的这篇技术说明“更改 ITM 组件服务器上的 IP 地址或主机名的影响“是一个很好的例子,说明主机名更改后通常需要使所有内容恢复同步。