Linuxは時間を管理するうえで二つの時計を持ち合わせている。
一つはマザーボードに設置されている、ハードウェアクロック(これは別のページにて記述する)、もう一つがOSがソフトウェア的に管理するシステムクロックだ。このページではシステムクロックについて解説する。
Linuxの時間がずれている?などあれば、参考にして調整してほしい。
Linuxのシステムクロックとは?
Linuxの起動時にハードウェアクロックを一度参照する。その値を元に適切に設定されシステムクロックが動き始めることになる。
そのため再起動時にハードウェアクロックにずれがあると、システムクロックにもずれが生じるので気をつけよう。
システムクロックを調整したにもかかわらず、起動するたびに時刻がずれるようであれば、ハードウェアクロックを確かめよう。
時刻の設定調整はファイルシステムのタイムスタンプやログなどの時刻に直結しているので、定期的に調整し常に正しい時刻を設定するようにしたい。
システムクロックに関するコマンド
dateコマンド
dateコマンドを使用すると現在のシステムクロックを確認、および設定することが出来る。システムクロックを表示する場合
$ date
とコマンドを叩けばよい。現状のシステムクロックが表示されるはずだ。dateコマンドを使用して時刻を設定する場合は
# date [MMDDhhmm[[CC]YY][.ss]]
の書式に沿って設定する。例をあげると
# date 102200122016
として設定すると「2016年10月22日00時12分」となる。それぞれ
「MMが月」「DDが日」「hhが時」「mmが分」「CCが西暦上二桁」「YYが西暦下二桁」となる。「.ssは秒」の指定となっている。
またdateは引数に「+」をあたえると指定した書式での表示が可能となっている。例えば日本人になじみぶかい、表記にしてみると
$ date "+%Y/%m/%d %H:%M"
実行結果
2016/10/22 00:26
となるそれぞれの項目は「%Y年」「%m月」「%d日」「%H時」「%M分」「%a曜日」「%b月名」となっている
ntpdateコマンド
残念ながらdateコマンドだけでは正確な時刻を設定することは不可能だ。手動で時刻をあわせていると、どうしても秒単位にずれが発生する。もしくは長時間稼動させているサーバは何もしなければ徐々に時刻がずれてゆく。
デジタルの時計とは以外にアバウトなものなのだ。そのため時刻をつかさどることに専属するNTPサーバと通信をとって同期することで、正しい時刻を取得することが出来る。
ntpdateコマンドはNTPサーバのクライアントである。このコマンドを使用して時刻サーバから正しい時刻を取得する。ntpdateコマンド自体は書式的には単純である。
ntpdate NTPサーバ
となっている。例えば
# ntpdate ntp.nict.jp
などだ。このコマンドによりNTPサーバから正確な時刻を取得できる。
ntpd(NTPサーバ)
自分でNTPサーバを構築することも可能だ。各ディストリビューションでntpのパッケージが用意されているはずだ。それぞれの方法でインストールしよう。例えばDebianの場合
# apt-get install ntp
とするとntpサーバがインストールされる。
古いシステムの場合の起動および管理方法(古いRedHat系など)
サービスをスタートする。
# /etc/init.d/ntpd start
サービスを停止する。
# /etc/init.d/ntpd stop
サービスを再起動する。
# /etc/init.d/ntpd restart
起動時にサービスを自動的に起動する。
# chkconfig ntpd on
モダンなシステムの場合(最新のDebianなど)
サービスを起動する。
# systemctl start ntp
サービスを停止する。
# systemctl stop ntp
サービスを再起動する。
# systemctl restart ntp
起動時にサービスを自動的に起動する。
# systemctl enable ntp
具体的な設定
vi /etc/ntp.conf
1 2 3 4 5 6 7 8 9 10 11 |
#デフォルトの参照サーバをコメントアウト #server 0.debian.pool.ntp.org iburst #server 1.debian.pool.ntp.org iburst #server 2.debian.pool.ntp.org iburst #server 3.debian.pool.ntp.org iburst #自分で参照するサーバを指定 server ntp1.jst.mfeed.ad.jp server ntp2.jst.mfeed.ad.jp server ntp3.jst.mfeed.ad.jp #追記 LAN内のマシンからの時刻同期許可(アドレスは各自の環境にあわせること) restrict 192.168.xxx.xxx mask 255.255.255.0 nomodify notrap |
設定しおえたら、サービスを再起動しよう。
# ntpq -p
で状態を確認できる。
CentOS7の場合
CentOS6系までは他と同じくntpを使用して時刻同期をおこなっていた。しかしCentOS7からは「Chrony」を使用して時刻同期をするようになっている。デーモンが変わるが、やることはさほど変化しない。設定も難しくないので安心していただきたい。
chronyがはいっていない場合インストールする
# yum install chrony
サービスを起動する。
# systemctl start chronyd
サービスを停止する。
# systemctl stop chronyd
サービスを再起動する。
# systemctl restart chronyd
起動時にサービスを自動的に起動する。
# systemctl enable chronyd
具体的な設定
vi /etc/chrony.conf
1 2 3 4 5 6 7 8 9 10 11 |
#デフォルトの参照サーバをコメントアウト #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 #自分で参照するサーバを指定 server ntp1.jst.mfeed.ad.jp server ntp2.jst.mfeed.ad.jp server ntp3.jst.mfeed.ad.jp #追記 LAN内のマシンからの時刻同期許可(アドレスは各自の環境にあわせること) Allow 192.168/16 |
設定し終えたらサービスを再起動しよう。
# chronyc sources
で状況が確認できる。
まとめ
このページでは時間がずれているとき調整ができる、Linuxのシステムクロックについてお伝えした。
必要なときに随時調べればいいが、「こういった流れでできるのか」というのは掴んでいた方がいいだろう。