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 寫的工作:它們現在會在你當地時間的那個鐘點執行。

評論

目前還沒有評論。歡迎成為第一位。

發表評論

評論在顯示前會經過審核。