EQVPS
ダッシュボード始める

VPS のホスト名とタイムゾーンを変更する方法

Ubuntu、Debian、Windows Server でサーバー名を変え、時計を自分のタイムゾーンに合わせます。hostnamectl だけでは出てしまう sudo の警告を消し、変更後の cron、ログ、時刻同期の動きも確認しました。すべての手順を当社のイメージで検証済みです。

新しいサーバーの名前は注文時に入力したもので、時計は UTC です。どちらも簡単に変えられます。名前の変更には落とし穴が 1 つあり、いつものコマンドでは /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、つまり実時間で 9 時間早く動きます。

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 前提で書いたジョブは確認してください。今後はその時刻が現地時間として扱われます。

コメント

まだコメントはありません。最初になりましょう。

コメントを残す

コメントは表示される前にモデレートされます。