タイムゾーン | Ubuntu
タイムゾーンを確認
$ timedatectl
Local time: Sat 2023-09-02 00:46:02 UTC
Universal time: Sat 2023-09-02 00:46:02 UTC
RTC time: Sat 2023-09-02 00:46:02
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
表示だけなら sudo は不要です。
※1 /etc/timezone(Debian 系特有のファイル)
$ cat /etc/timezone
Etc/UTC
※2 date の出力
$ date
Sat Sep 2 00:51:47 UTC 2023
※3 実際のタイムゾーンは /etc/localtime(シンボリックリンク)で決まります。
$ ls -l /etc/localtime
Asia/Tokyo に変更
設定可能なタイムゾーンの一覧:
$ timedatectl list-timezones | grep Tokyo
Asia/Tokyo
変更:
$ sudo timedatectl set-timezone Asia/Tokyo
$ timedatectl
[!NOTE]
- サーバーのタイムゾーンは UTC のまま運用し、アプリケーション側で変換する方針も一般的です。ログの時刻が変わるため、変更する場合はチームで方針を揃えてください。
- cron などの常駐プロセスは、変更後に再起動しないと反映されない場合があります。
- PHP(
date.timezone)や MySQL(default-time-zone)のタイムゾーンは別に設定します。
Docker
Docker の Ubuntu イメージは、タイムゾーンが指定されていないと、パッケージ(例: php, apache2)のインストール時に tzdata が依存関係として入り、タイムゾーンの選択を求められます。これを避けるため、対話を無効にして tzdata を先にインストールします。
公式の Ubuntu イメージには systemd が入っておらず、timedatectl も使えません1。Dockerfile で次のように設定します。
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Tokyo
RUN apt-get update \
&& apt-get install -y --no-install-recommends tzdata \
&& ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
&& echo $TZ > /etc/timezone \
&& rm -rf /var/lib/apt/lists/*
- 公式イメージには
tzdataが含まれないため、/usr/share/zoneinfoを使うにはtzdataのインストールが必要です。 DEBIAN_FRONTENDはENVではなくARGにします(ENVにすると、コンテナ実行時にも設定が残るため)。
-
timedatectlはsystemd-timedated(D-Bus 経由)を使うため、systemd が PID 1 として動いている環境が必要です。コンテナにsystemdパッケージを入れるだけでは動きません。 ↩