EQVPS
控制台开始使用

如何修改 VPS 的主机名和时区

在 Ubuntu、Debian 和 Windows Server 上给服务器改名,并把时钟调到你的时区;避免只用 hostnamectl 时出现的 sudo 警告,并在修改后检查 cron、日志和时间同步的表现。每一步都在我们的镜像上验证过。

新服务器的名字就是你下单时填写的那个,时钟则是 UTC。两者都很容易改。改名有一个坑:常用的命令会在 /etc/hosts 里留下旧的一行,于是在 Ubuntu 上 sudo 每执行一条命令都会抱怨。本文在 Ubuntu 和 Debian 上把这两件事都处理好,并给出 Windows Server 的命令。每一步我们都在自家镜像上跑过。

你需要一个有 sudo 权限的用户。Ubuntu 配置指南会创建一个。

1. 查看当前的名字和时间

hostnamectl
timedatectl

我们新开的 Ubuntu 24.04 服务器把下单时的名字显示为静态主机名,同时显示 Time zone: Etc/UTC、System clock synchronized: yes 和 NTP service: active。Debian 12 和 13 也一样。时间同步已经在工作,不用另装 NTP。

2. 修改主机名

选一个短名字;如果要和你管理的 DNS 记录对应,就用完整的名字,比如 web1.example.com:

sudo hostnamectl set-hostname web1.example.com

名字立即就改了,但 /etc/hosts 里的 127.0.1.1 仍指向旧名字。在 Ubuntu 上,问题马上就出现了:

sudo: unable to resolve host web1.example.com: No address associated with hostname

hostname -f 也以同样的方式失败。Debian 通过别的途径解析到了名字,没有出现警告,但它的 /etc/hosts 同样过时。两个系统都要把文件改好:

sudo sed -i 's/^127\.0\.1\.1 .*/127.0.1.1 web1.example.com web1/' /etc/hosts
grep 127.0.1.1 /etc/hosts
hostname -f

之后 sudo 安静了,hostname -f 输出 web1.example.com,hostname -s 输出 web1。

/etc/hosts 开头的注释说这个文件由 cloud-init 管理,你的修改可能会丢失。在我们的镜像上,cloud-init 只在服务器第一次启动时写这个文件。我们重启过,之后又让 cloud-init 把下一次启动当作新实例,名字和我们在 /etc/hosts 里改的那一行都保留了下来。

主机名只存在于你的服务器上。如果别的机器要通过这个名字找到它,还需要添加 DNS 记录:把域名指向你的 VPS 讲了怎么做。如果是邮件服务器,反向记录也很重要:参见设置反向 DNS。

3. 修改时区

列出时区并选一个。我们的服务器上有 497 个:

timedatectl list-timezones | grep -i tokyo
sudo timedatectl set-timezone Asia/Tokyo
timedatectl

时钟本身不会跳动。改变的只是时间的显示方式,以及按本地时间编排的计划如何被解读。从 UTC 切换到 Asia/Tokyo 之后,我们看到:

对象修改之后
date、journalctl立即显示东京时间
cron立即按东京时间:设在 09:48 的任务于 09:48:01 JST 执行,无需重启
/var/log/syslog(Ubuntu)在重启 rsyslog 之前一直写 UTC 时间
/etc/timezone(Ubuntu)仍然是 Etc/UTC

所以要重启日志服务,以及一切长期运行并输出时间的程序,比如你的应用:

sudo systemctl restart rsyslog

Debian 12 和 13 不安装 rsyslog。它们的日志只在 journal 里,journal 会自动跟随新时区。

少数老程序从 /etc/timezone 而不是系统设置读取时区。如果其中某个仍显示 UTC,就把同样的名字写进这个文件,再重启那个程序:

echo Asia/Tokyo | sudo tee /etc/timezone

切换之前,先检查一下 crontab。原本按 UTC 03:00 写的 0 3 * * *,现在会在东京时间 03:00 运行,也就是在真实时间上提前九个小时。

4. Windows Server

在 Windows Server 2022 上,以管理员身份打开 PowerShell。改名需要重启:

Rename-Computer -NewName web1 -Restart

Windows 计算机名最多 15 个字符,所以这里用短名字。

时区先查到 ID 再设置。它立即生效,无需重启:

Get-TimeZone -ListAvailable | Where-Object Id -like '*Tokyo*'
Set-TimeZone -Id 'Tokyo Standard Time'
Get-TimeZone

既然已经登录了,正好顺手加固 RDP。

选哪个套餐

主机名和时区不花钱,所以任何套餐都行:小型 Linux 服务器用 Nano,每月 $3;Windows Server 2022 用 Windows-Small,每月 $11。所有套餐都在 VPS 页面,支付方式为 Base、Ethereum 或 Polygon 网络上的 USDT、USDC 或 ETH。

常见问题

重启后 cloud-init 会把主机名改回去吗?

在我们的镜像上不会。我们用 hostnamectl 设置了新名字并重启,又让 cloud-init 把下一次启动当作全新的实例。两次名字都保留了下来,我们对 /etc/hosts 的修改也还在。重装系统会得到一个使用原名的全新系统。

改名之后,为什么 sudo 提示“unable to resolve host”?

hostnamectl 改的是主机名,不会改 /etc/hosts,那里的 127.0.1.1 仍然指向旧名字。在 Ubuntu 上,sudo 于是会在每条命令前打印“unable to resolve host”。把 127.0.1.1 那一行里的旧名字换成新名字,警告就消失了。

服务器该用 UTC 还是本地时间?

UTC 是更稳妥的默认选择:不同服务器的日志时间能对上,也不会因为夏令时而跳变。如果你希望 cron 任务和日志时间按自己的时间来读,就切换到你的时区。两种都能用,随时可以再改回来。

需要配置 NTP 吗?

不需要。我们的 Ubuntu 和 Debian 镜像从第一次启动起就用 systemd-timesyncd 同步时钟。运行 timedatectl,确认有“System clock synchronized: yes”。

修改时区会不会弄乱我的 cron 任务?

cron 会立刻使用新时区。在我们的 Ubuntu 24.04 服务器上,一个设在东京时间 09:48 的任务,在没有重启 cron 的情况下于东京时间 09:48:01 执行了。不过请检查那些按 UTC 写的任务:它们现在会在你本地时间的那个钟点运行。

评论

暂无评论。来做第一个吧。

发表评论

评论在显示前会经过审核。