⏱️

システム時刻

2022/02/10に公開

ハードウェアクロック

コンピュータ内の電池で動作しており、電源がオフの状態でも動き続けている

hwclockコマンド

ハードウェア時刻の参照や設定ができる

ハードウェア時刻を表示
hwclock -r
hwclock --show
システム時刻をハードウェア時刻に設定する
hwclock -w
hwclock --systohc
ハードウェア時刻をシステム時刻に設定する
hwclock -s
hwclock --hctosys

システムクロック

カーネルの時刻
起動時はハードウェア時刻を参照する
その後は別々に動くため、時刻の差異が生じてくる

dateコマンド

現在のシステム時刻を表示する
$ date
202225日 土曜日 000040JST

rootユーザーはdateコマンドでシステム時刻を手動で設定できる
引数を「+」で始めると、指定した書式で表示する
date "+%Y-%m-%d" → 2022-02-05

時刻を指定した書式でファイルを作成
$ touch $(date "+%Y%m%d").txt

タイムゾーンの設定

timedatectlコマンド

タイムゾーンや日付を管理できる
systemdを採用したディストリビューションで利用可能

タイムゾーン:地域ごとに区分された標準時間帯

timedatectlの実行結果
$ timedatectl
               Local time: Sat 2022-02-05 00:45:24 JST
           Universal time: Fri 2022-02-04 15:45:24 UTC
                 RTC time: Fri 2022-02-04 15:45:25
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: inactive
          RTC in local TZ: no

主なサブコマンド

時刻を設定する
# timedatectl set-time 2022-02-05 00:30:00
ntpを使って時刻同期する
# timedatectl set-ntp yes
タイムゾーンの設定
# timedatectl set-timezone Asia/Tokyo
タイムゾーンの一覧を表示
# timedatectl list-timezones

タイムソーン情報は、/usr/share/zoneinfoディレクトリ配下に格納されている。
システムで利用するタイムゾーンは、上記のファイルを/etc/localtimeにコピーすることで設定できる

# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

また、環境変数TZで設定することもできる

$ export TZ="Asia/Tokyo"
tzselect コマンドでタイムゾーンの設定値をインタラクティブに確認できる
$ tzselect

NTPによる時刻設定

NTP (Network Time Protocol)
インターネット上にあるにNTPサーバーから正確な時刻を取得する
NTPは階層構造になっており、最上位は原子時計やGPSなどで正確な時刻情報を持っている
その直下のNTPサーバーをStratum1、その次の階層がStratum2...となっている
→NTPサーバーは複数のNTPサーバーから正確な時刻を取得する

ntpdateコマンド

ntpdate NTPサーバー名

指定したNTPサーバーから時刻を取得する
$ sudo ntpdate ntp.nict.jp

ntpqコマンド

NTPサーバーの状態を表示する

-pのオプションで同期状態を確認する
$ ntpq -p

NTPサーバーの設定は/etc/ntp.confに設定する

Chrony

ntpd/ntpdateに代わるNTPサーバー/クライアントソフト
デーモンプロセスchronydとクライアントコマンドchronycから構成される
/etc/chrony.confファイルに設定する (Debian系では/etc/chrony/chrony.conf)

/etc/chrony.conf
$ cat /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3
~~省略~~

同期先のNTPサーバーは、serverパラメータで指定する
"pool"はpoolプロジェクトが提供しているサーバーで、複数のNTPサーバーをまとめて仮想的なNTPサーバーとして運用している。
→特定のNTPサーバーに負荷が集中しないようにしている

serverパラメータの設定オプション
iburst:初回の同期時間をはやめる
prefer:優先するサーバーに設定する
minpoll:サーバーへのポーリング間隔の最小を設定。最小は4 → 2の4乗
maxpoll:サーバーへのポーリング間隔の最小を設定。最大は17 → 2の17乗

chronycコマンド

chronydの管理するコマンド
chronyc [サブコマンド]

同期しているNTPサーバーの情報
$ chronyc sources
$ chronyc sources
210 Number of sources = 4
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 60-56-214-78f2.kns1.eonet     1   6   377    32   +283us[ +440us] +/- 8193us
^- 7c2956c8.i-revonet.jp         2   6   377    33   +839us[ +995us] +/-   31ms
^- gw1.kohaaloha.com             2   6   377    34  -6447us[-6291us] +/-   37ms
^- 122x215x240x75.ap122.ftth     2   6   377    33   -622us[ -465us] +/-   33ms

^*:同期元
^+:同期候補
^-:同期候補外

トラッキング情報を表示する
$ chronyc tracking
$ chronyc tracking
Reference ID    : CB00710F (foo.example.net)
Stratum         : 3
Ref time (UTC)  : Fri Jan 27 09:49:17 2017
System time     :  0.000006523 seconds slow of NTP time
Last offset     : -0.000006747 seconds
RMS offset      : 0.000035822 seconds
Frequency       : 3.225 ppm slow
Residual freq   : 0.000 ppm
Skew            : 0.129 ppm
Root delay      : 0.013639022 seconds
Root dispersion : 0.001100737 seconds
Update interval : 64.2 seconds
Leap status     : Normal

Discussion