タイムゾーン、ロケール、システム言語
タイムゾーンの設定方法、時刻同期の有効化、UTF-8 ロケールの設定、ログとデータベースを UTC で保つべき理由について説明します。
更新日 2026年8月23日
新品のマシンは通常 UTC で動作し、ロケールは最小限しか入っていません。ログを読んだりスケジュールタスクを実行したりしない限り、気づくことはありません。しかし cron、メール、レポートが関わってくると、時刻とエンコーディングが非常に重要になります。
タイムゾーン
timedatectl
timedatectl list-timezones | grep Moscow
timedatectl set-timezone Europe/Moscow
timedatectl はローカル時刻、UTC、同期状態を表示します。System clock synchronized: yes の行は、クロックがネットワーク経由で同期されていることを意味します。
同期が無効になっている場合:
timedatectl set-ntp true
systemctl status systemd-timesyncd
AlmaLinux と CentOS Stream では、通常 chronyd が時刻を管理します:
systemctl enable --now chronyd
chronyc tracking
ロケール
ロケールはメッセージの言語、エンコーディング、数値と日付の形式を決定します。最低限必要なのは UTF-8 です。そうでなければ、ロシア語のファイル名やプログラムの出力が疑問符に変わってしまいます。
Debian と Ubuntu:
apt install -y locales
dpkg-reconfigure locales
localectl set-locale LANG=ru_RU.UTF-8
AlmaLinux と CentOS Stream:
dnf install -y glibc-langpack-ru
localectl set-locale LANG=ru_RU.UTF-8
確認:
locale
locale -a | grep -i utf
変更は新しいセッションに適用されます。SSH で再度ログインしてください。
コンソールのキーボードレイアウト
/hosting/vds/m/<id> パネルの「コンソール」タブにある「画面」(VNC)ビューは、キー入力をそのまま転送します。そこで直接キリル文字を入力する必要がある場合:
localectl set-keymap ru
サービスにはこれは必要ありません。UTF-8 で十分です。
UTC のままにしておくべきもの
システム自体とデータベースは UTC のままにし、ローカル時刻は人に表示するときだけ使うのが合理的です。
- UTC のログはマシン間で比較でき、時計が変更されても飛びません。
- UTC のデータベースは期間の計算を壊しません。
- cron はシステムのタイムゾーンで時刻を計算します。タイムゾーンを変更した場合は、スケジュールを読み直してください。
systemctl restart cron
crontab -l
よくある間違い
| 症状 | 原因 | 解決策 |
|---|---|---|
setlocale: LC_ALL: cannot change locale | クライアントが独自のロケールを送信しているが、サーバーに存在しない | ロケールを生成するか、クライアント側で LANG の転送を削除する |
| ファイル名の文字化け | ロケールが UTF-8 ではない | LANG=ru_RU.UTF-8 を設定して再度ログインする |
| 時刻が数分「ずれた」 | 同期が無効になっている | timedatectl set-ntp true |
| タスクが誤った時刻に実行された | タイムゾーンを変更したがスケジュールはそのまま | crontab を再計算する |
バックアップジョブとログを設定する前にタイムゾーンを変更してください。稼働中のマシンでタイムゾーンを変更すると、すべてのスケジュールを一度に見直すことになります。