【NTP】【CentOS7】【CentOS6】【AWS】時刻の設定が正しいか確認する方法

自身が管理しているサーバーの時刻が正しく設定されているか確認する手順です。

一昔前は、サーバーは「物理サーバー」が中心だったので時刻の設定は単純でしたが、今は「物理サーバー」「仮想マシン」「クラウド」と環境が混在していることが普通になりました。

時刻を持っているシステムは

  • 物理サーバーのBIOS(ハードウェアクロック)
  • 物理サーバー
  • 仮想マシン
  • ホスト(仮想マシンを搭載するサーバー)
  • ホストのBIOS(ハードウェアクロック)
  • クラウド(AWS EC2)

など多種多様です。

 

 

 

 

今回の環境

今回は以下の3種類の環境で試しました。

  • CentOS7(仮想マシン)
  • CentOS6(仮想マシン)
  • RHEL7(AWS)

 

 

基本はタイムゾーンの設定を正しくする

基本的にタイムゾーンの設定が正しければ、時刻も正しくなります。

更に全台のサーバーのタイムゾーンが「JST(Japan Standard Time)」で統一されていて、且つ NTP で時刻同期をしていれば時刻のずれはなくなります。

 

タイムゾーンの確認

タイムゾーンの確認は、いずれの環境も「date」コマンドで確認できます。

 

【CentOS7】dateコマンド

JSTです。

[root@cent07 ~]# date
2017年 9月 16日 土曜日 15:31:03 JST
[root@cent07 ~]#

 

【CentOS6】dateコマンド

JSTです。

[root@cent06 ~]# date
2017年 9月 16日 土曜日 15:30:18 JST

[root@cent06 ~]#

 

【RHEL7】【AWS】dateコマンド

AWS は起動した直後です。

AWS はメディアを挿入してパーティションを切ったり、ロケールを設定してインストールをすると言うことがないので、デフォルトで起動した状態です。

タイムゾーンやロケールの設定は何もしていません。

タイムゾーンは「EDT」になりました。

# date
Sat Sep 16 02:31:03 EDT 2017

#

 

 

EDTとは(Eastern Standard Time、東部標準時)の略です。

アメリカやカナダで使用されています。

JSTとEDTの時差は「13時間」です。

 

 

【参考】日本標準時と米国東部標準時(夏時間)の時間差表

JST     EDT

00:00   11:00(前日)

01:00   12:00(前日)

02:00   13:00(前日)

03:00   14:00(前日)

04:00   15:00(前日)

05:00   16:00(前日)

06:00   17:00(前日)

07:00   18:00(前日)

08:00   19:00(前日)

09:00   20:00(前日)

10:00   21:00(前日)

11:00   22:00(前日)

12:00   23:00(前日)

13:00   00:00

 

 

タイムゾーンの変更手順

/etc/localtime にタイムゾーンを設定します。

 

現在の /etc/localtime の確認方法

初めに現在の「/etc/localtime」を確認します。

 

【CentOS7】

[root@cent07 ~]# strings /etc/localtime
TZif2
TZif2
JST-9
[root@cent07 ~]#

 

【CentOS6】

[root@cent06 ~]# strings /etc/localtime
TZif2
TZif2
JST-9
[root@cent06 ~]#

 

【AWS】【RHEL7】

# strings /etc/localtime
TZif2
6`/~Kp0
`1gg
`3GI
`5’+
pCda`D/vpEDC`E
@`M|kpN
“`O\MpP
`Q</pRu
k`b-
pcgM`d
xpeG/`e
Zpg’
<`|~gp}
`~^Ip
TZif2
/~Kp
Cda`
D/vp
EDC`
M|kp
O\Mp
Q</p
cgM`
eG/`
|~gp
~^Ip
EST5EDT,M3.2.0,M11.1.0
#

 

 

「/usr/share/zoneinfo/Asia/Tokyo」を「/etc/localtime」にシンボリックリンクを張りタイムゾーンを変更する

 cpコピーでコピーしても OK です。

今回は「ln」コマンドでシンボリックリンクを張る方式にします。

「ln -sf」としていますが、すでにリンクが張ってあるとエラーになるので「-f」オプションで強制的にシンボリックリンクを張っています。

 

【CentOS7】

[root@cent07 Asia]# cp -ip /etc/localtime /etc/localtime_20170916

[root@cent07 Asia]# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
[root@cent07 Asia]# ls -l /etc/localtime
lrwxrwxrwx 1 root root 30 9月 16 16:12 /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo
[root@cent07 Asia]# date
2017年 9月 16日 土曜日 16:27:21 JST
[root@cent07 Asia]#

 

【CentOS6】

[root@cent06 Asia]# cp -ip /etc/localtime /etc/localtime_20170916

[root@cent06 Asia]# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
[root@cent06 Asia]# ls -l /etc/localtime
lrwxrwxrwx. 1 root root 30 9月 16 16:12 2017 /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo
[root@cent06 Asia]# date
2017年 9月 16日 土曜日 16:26:36 JST
[root@cent06 Asia]#

 

【AWS】【RHEL7】

# cp -ip /etc/localtime /etc/localtime_20170916

# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# ls -l /etc/localtime
lrwxrwxrwx. 1 root root 30 Sep 16 16:12 /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo
# date
Sat Sep 16 16:27:21 JST 2017
#

 

 

シンボリックリンクは「貼る」?「張る」?

「貼る」は限定的な使い方をするようです。

【例】ポスターを貼る、貼り紙をするなど。

「paste(ペースト)」は「貼る」です。

 

「張る」は「貼る」と同じ意味ですが、範囲が広いです。

氷が張る、意地を張る、気が張るなど。

 

ペーストという意味なら

  • 障子を張る ○
  • 障子を貼る ○

と両方使えますが、

 

ペースト以外だと、

  • 意地を張る ○
  • 意地を貼る ×

と少々おかしな感じになります。

 

シンボリックリンクやリンクなどは「張る」でも「貼る」でも正しいような気がしますが、厳密に言えばリンクを「貼る(コピペするというニュアンス)」よりリンクを「張る(リンクの設定をするというニュアンス)」の方がより意味が分かりやすいと思います。

 

動作確認:loggerでログを吐いてみる

タイムゾーンを変更したら、反映されているか「logger」コマンドでログを吐いてみてタイムスタンプを確認します。

[root@cent07 log]# logger test
[root@cent07 log]# tail messages
Sep 16 22:30:01 cent07 systemd: Starting Session 102 of user root.
Sep 16 22:30:01 cent07 systemd: Removed slice User Slice of root.
Sep 16 22:30:01 cent07 systemd: Stopping User Slice of root.
Sep 16 22:40:01 cent07 systemd: Created slice User Slice of root.
Sep 16 22:40:01 cent07 systemd: Starting User Slice of root.
Sep 16 22:40:01 cent07 systemd: Started Session 103 of user root.
Sep 16 22:40:01 cent07 systemd: Starting Session 103 of user root.
Sep 16 22:40:01 cent07 systemd: Removed slice User Slice of root.
Sep 16 22:40:01 cent07 systemd: Stopping User Slice of root.
Sep 16 22:42:56 cent07 test: test
[root@cent07 log]#

 

 

ハードウェアクロックとは?

ハードウェアクロックも時刻を持っています。

 

以下、「システムクロック」と「ハードウェアクロック」の違いです。

  • システムクロック ← OS が持っている時刻。電源断で時刻は消える。
  • ハードウェアクロック ← マザーボードが持っている時刻。電源断でも電池があるので消えない。BIOSの時刻情報はハードウェアクロック。

 

通常、時刻は NTP を利用して取得をしていることが多いと思います。

特に1つのシステムにサーバーが数十台あるような場合は、時刻がずれるとデータベースのデータに不整合が起きたり、アプリケーションの動作にも影響が出ます。

では、NTP で時刻を取得した後、どのように時刻を「システムクロック」「ハードウェアクロック」に反映しているのでしょうか?

 

まずは NTP で時刻を取得した後、取得した時刻をシステムクロックに反映させます。

そしてOSによって多少は変わるかもしれませんが定期的に「システムクロック」を「ハードウェアクロック」に反映させます。

 

NTP を使用する場合は、ハードウェアクロックは 11 分ごとにシステムクロックに自動的に同期されます。

 

 

 

ハードウェアクロックの設定

タイムゾーンを「JST」に変更したにもかからわず、時刻が「JST」に変わらない場合はハードウェアクロックの設定も確認しましょう。

 

ちなみにハードウェアクロックの設定は

  • CentOS6 → /etc/sysconfig/clock
  • CentOS7 → timedatectl コマンド

 

 

timezone 設定ファイル  /etc/sysconfig/clock

【CentOS6】

ファイルで管理をしています。

[test@cent06 ~]$ cat /etc/sysconfig/clock
ZONE=”Asia/Tokyo”
[test@cent06 ~]$

 

 

timedatectl コマンド

【CentOS7・RHEL7】

[root@cent07 log]# timedatectl
      Local time: 土 2017-09-16 23:05:27 JST
  Universal time: 土 2017-09-16 14:05:27 UTC
        RTC time: 土 2017-09-16 14:05:27
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
[root@cent07 log]#

 

 

date コマンドで「JST」、timedatectl コマンドでも「JST」、しかし /var/log/messages のログのタイムスタンプが変化なしの場合は OS の再起動が必要?

「システムクロック」も「JST」、「ハードウェアクロック」も「JST」、しかし「/var/log/messges」のタイムスタンプは変化なしの場合は OS を再起動すると反映されました。

ということは、OSの再起動が必要ということなのでしょうか??

Sep 16 10:16:26 ip-xxx-xxx-xxx-xxx dbus[461]: [system] Successfully activated service ‘org.freedesktop.nm_dispatcher’
Sep 16 10:16:26 ip-xxx-xxx-xxx-xxx dbus-daemon: dbus[461]: [system] Successfully activated service ‘org.freedesktop.nm_dispatcher’
Sep 16 10:16:26 ip-xxx-xxx-xxx-xxx systemd: Started Network Manager Script Dispatcher Service.
Sep 16 10:16:26 ip-xxx-xxx-xxx-xxx nm-dispatcher: req:1 ‘dhcp4-change’ [eth0]: new request (3 scripts)
Sep 16 10:16:26 ip-xxx-xxx-xxx-xxx nm-dispatcher: req:1 ‘dhcp4-change’ [eth0]: start running ordered scripts…
Sep 16 10:21:52 ip-xxx-xxx-xxx-xxx rsyslogd: [origin software=”rsyslogd” swVersion=”7.4.7″ x-pid=”740″ x-info=”http://www.rsyslog.com”] exiting on signal 15.
Sep 16 23:22:29 ip-xxx-xxx-xxx-xxx rsyslogd: [origin software=”rsyslogd” swVersion=”7.4.7″ x-pid=”738″ x-info=”http://www.rsyslog.com”] start
Sep 16 23:22:29 ip-xxx-xxx-xxx-xxx rsyslogd-2307: warning: ~ action is deprecated, consider using the ‘stop’ statement instead [try http://www.rsyslog.com/e/2307 ]
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: Initializing cgroup subsys cpuset
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: Initializing cgroup subsys cpu
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: Initializing cgroup subsys cpuacct
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: Linux version 3.10.0-514.10.2.el7.x86_64 (mockbuild@x86-039.build.eng.bos.redhat.com) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Mon Feb 20 02:37:52 EST 2017
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-3.10.0-514.10.2.el7.x86_64 root=UUID=3ed41454-00c8-4803-bf61-2ee88aa54dbf ro console=ttyS0,115200n8 console=tty0 net.ifnames=0 crashkernel=auto LANG=en_US.UTF-8
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: e820: BIOS-provided physical RAM map:
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009dfff] usable
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: BIOS-e820: [mem 0x000000000009e000-0x000000000009ffff] reserved
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: BIOS-e820: [mem 0x0000000000100000-0x000000003fffffff] usable
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: BIOS-e820: [mem 0x00000000fc000000-0x00000000ffffffff] reserved
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: NX (Execute Disable) protection: active
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: SMBIOS 2.4 present.
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: Hypervisor detected: Xen HVM
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: Xen version 4.2.
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: Netfront and the Xen platform PCI driver have been compiled for this kernel: unplug emulated NICs.
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: Blkfront and the Xen platform PCI driver have been compiled for this kernel: unplug emulated disks.#012You might have to change the root device#012from /dev/hd[a-d] to /dev/xvd[a-d]#012in your root= kernel command line option
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: e820: last_pfn = 0x40000 max_arch_pfn = 0x400000000
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: found SMP MP-table at [mem 0x000fbc20-0x000fbc2f] mapped at [ffff8800000fbc20]
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: RAMDISK: [mem 0x32469000-0x3522cfff]
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: ACPI: RSDP 00000000000ea020 00024 (v02 Xen)
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: ACPI: XSDT 00000000fc00ddc0 00054 (v01 Xen HVM 00000000 HVML 00000000)
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: ACPI: FACP 00000000fc00da80 000F4 (v04 Xen HVM 00000000 HVML 00000000)
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: ACPI: DSDT 00000000fc001ce0 0BD19 (v02 Xen HVM 00000000 INTL 20090123)
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: ACPI: FACS 00000000fc001ca0 00040
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: ACPI: APIC 00000000fc00db80 000D8 (v02 Xen HVM 00000000 HVML 00000000)
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: ACPI: HPET 00000000fc00dcd0 00038 (v01 Xen HVM 00000000 HVML 00000000)
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: ACPI: WAET 00000000fc00dd10 00028 (v01 Xen HVM 00000000 HVML 00000000)
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: ACPI: SSDT 00000000fc00dd40 00031 (v02 Xen HVM 00000000 INTL 20090123)
Sep 16 23:22:20 ip-xxx-xxx-xxx-xxx kernel: ACPI: SSDT 00000000fc00dd80 00031 (v02 Xen HVM 00000000 INTL 20090123)

 

ログを見ていて気が付いたことは「rsyslog」です。

rsyslogサービスがログを管理していました。

[root@ip-172-31-19-246 ~]# systemctl list-unit-files | grep syslog
rsyslog.service enabled
syslog.socket static
[root@ip-172-31-19-246 ~]#

 

ということは、/var/log/messages ファイルにログを出力しているのは rsyslog です。

ちなみに、rsyslog に対する設定変更を反映するためには OS 再起動まで必要なくて rsyslog デーモンの再起動だけで大丈夫なはずです。

すでに OS を再起動してしまいましたが・・・

 

 

/etc/adjtime の設定の確認

「/etc/adjtime」とはハードウェアクロックのタイムゾーンを保存しています。

以下、/etc/adjtime の設定は「UTC」になっていますが、間違っているわけではありません。

これはハードウェアクロックの時刻を「UTC」として扱うということです。

 

【CentOS6】

[root@cent07 Asia]# cat /etc/adjtime
0.0 0 0.0
0
UTC
[root@cent07 Asia]#

 

 

【CentOS7】

[root@cent06 Asia]# cat /etc/adjtime
0.000000 1502551694 0.000000
1502551694
UTC
[root@cent06 Asia]#

 

 

【RHEL7】

# cat /etc/adjtime
0.0 0 0.0
0
UTC
#

 

「タイムゾーン」と「ロケール」の違い

簡単に言うと

  • タイムゾーン → 地域による時差を調整する。
  • ロケール → 言語や国の違いを調整する。

です。

 

今回は時刻について説明をしていますが、「タイムゾーン」「ロケール」は関連があります。

例えば「日本」「日本語」を利用しているなら、必然的に「日本標準時」になるということです。

※もちろん例外もあります。

 

【AWS】【RHEL7】ロケール

AWSのディストリビューション情報です。

RHEL7です。

$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.3 (Maipo)

 

ロケールは「US」になっています。

$ localectl status
System Locale: LANG=en_US.UTF-8
VC Keymap: us
X11 Layout: us

 

 

 

ハードウェアクロックの構成

補足ですが man コマンドの結果を記載します。

NOTES
Clocks in a Linux System
There are two main clocks in a Linux system:

Linuxシステムには2つのメインクロックがあります。

 

The Hardware Clock: This is a clock that runs independently of any control program running in the CPU and even when the machine is powered off.

ハードウェアクロック:これは、CPUで実行中の制御プログラムとは無関係に、またマシンの電源がオフになっているときにも実行されるクロックです。

 

On an ISA system, this clock is specified as part of the ISA standard.

ISAシステムでは、このクロックはISA規格の一部として指定されています。
The control program can read or set this clock to a whole second, but the control program can also detect the edges of the 1 second clock ticks, so the clock actually has virtually infinite precision.

制御プログラムはこのクロックを1秒間に読み取るか設定することができますが、制御プログラムは1秒クロックティックのエッジも検出することができるため、実際にはクロックは実質的に無限の精度を持ちます。

 

This clock is commonly called the hardware clock, the real time clock, the RTC, the BIOS clock, and the CMOS clock.

このクロックは、一般にハードウェアクロック、リアルタイムクロック、RTC、BIOSクロック、およびCMOSクロックと呼ばれます。

 

Hardware Clock, in its capitalized form, was coined for use by hwclock because all of the other names are inappropriate to the point of being misleading.

ハードウェア・クロックは、大文字の形式で、hwclockで使用するために作成されました。

他のすべての名前は誤解を招くような点には不適切です。

 

So for example, some non-ISA systems have a few real time clocks with only one of them having its own power domain.

したがって、たとえば、一部の非ISAシステムではリアルタイムクロックが数個しかなく、そのうちの1つに独自の電源ドメインがあります。

 

A very low power external I2C or SPI clock chip might be used with a backup battery as the hardware clock to initialize a more functional integrated real-time clock which is used for most other purposes.

非常に低電力の外部I2CまたはSPIクロック・チップを、ハードウェア・クロックとしてバックアップ・バッテリと共に使用して、他の大部分の目的に使用されるより機能的な統合リアルタイム・クロックを初期化することができます。

 

 

The System Time: This is the time kept by a clock inside the Linux kernel and driven by a timer interrupt.

システム時間:これは、Linuxカーネル内の時計によって保持され、タイマ割り込みによって駆動される時間です。
(On an ISA machine, the timer interrupt is part of the ISA standard).

(ISAマシンでは、タイマ割り込みはISA標準の一部です)
It has meaning only while Linux is running on the machine.

これは、Linuxがマシン上で実行されている間だけ意味があります。
The System Time is the number of seconds since 00:00:00 January 1, 1970 UTC (or more succinctly, the number of seconds since 1969).

システム時間は、1970年1月1日00:00:00(またはより簡潔には、1969年以降の秒数)からの秒数です。
The System Time is not an integer, though.

しかし、System Timeは整数ではありません。
It has virtually infinite precision.

事実上無限の精度を持っています。

The System Time is the time that matters.

システム時間は重要な時間です。
The Hardware Clock’s basic purpose in a Linux system is to keep time when Linux is not running.

ハードウェアクロックの基本的な目的は、Linuxが動作していない時間を維持することです。
You initialize the System Time to the time from the Hardware Clock when Linux starts up, and then never use the Hardware Clock again.

Linuxの起動時にハードウェアクロックからの時間にシステム時間を初期化し、ハードウェアクロックを再び使用しないでください。
Note that in DOS, for which ISA was designed, the Hardware Clock is the only real time clock.

ISAが設計されたDOSでは、ハードウェアクロックが唯一のリアルタイムクロックであることに注意してください。

It is important that the System Time not have any discontinuities such as would happen if you used the date(1L) program to set it while the system is running.

システム稼動中に日付(1L)プログラムを使用して設定した場合など、システム時間に不連続性がないことが重要です。
You can, however, do whatever you want to the Hardware Clock while the system is running, and the next time Linux starts up, it will do so with the adjusted time from the Hardware Clock.

ただし、システムの稼働中にハードウェアクロックを実行することができます。また、次回のLinuxの起動時には、ハードウェアクロックからの調整時間を使用して実行します。

A Linux kernel maintains a concept of a local timezone for the system.

Linuxカーネルは、システムのローカルタイムゾーンの概念を維持しています。
But don’t be misled — almost nobody cares what timezone the kernel thinks it is in.

しかし、誤解されることはありません。カーネルがそれが何であると思うかはほとんど誰も気にしていません。
Instead, programs that care about the timezone (perhaps because they want to display a local time for you) almost always use a more traditional method of determining the timezone: They use the TZ environment variable and/or the /usr/share/zoneinfo directory, as explained in the man page for tzset(3).
代わりに、タイムゾーンを気にするプログラム(おそらくローカル時間を表示したいからかもしれません)は、ほとんどの場合、より伝統的なタイムゾーンの決定方法を使用します:TZ環境変数および/または/ usr / share / zoneinfoディレクトリ tzset(3)のmanページで説明されています。
However, some programs and fringe parts of the Linux kernel such as filesystems use the kernel timezone value.

しかし、ファイルシステムのようなLinuxカーネルの一部のプログラムやフリンジ部分は、カーネルのタイムゾーン値を使用します。

 

An example is the vfat filesystem.

一例はvfatファイルシステムです。

If the kernel timezone value is wrong, the vfat filesystem will report and set the wrong timestamps on files.

カーネルのタイムゾーン値が間違っていると、vfatファイルシステムはファイルに対して間違ったタイムスタンプを報告して設定します。

hwclock sets the kernel timezone to the value indicated by TZ and/or /usr/share/zoneinfo when you set the System Time using the –hctosys option.

hwclockは、–hctosysオプションを使用してシステム時刻を設定すると、カーネルのタイムゾーンをTZおよび/または/ usr / share / zoneinfoで示される値に設定します。

 

The timezone value actually consists of two parts: 1) a field tz_minuteswest indicating how many minutes local time (not adjusted for DST) lags behind UTC, and 2) a field tz_dsttime indicating the type of Daylight Savings Time (DST) convention that is in effect in the locality at the present time.

タイムゾーン値は、実際には、1)現地時間(DSTに対して調整されていない)がUTCより遅れた時間を示すフィールドtz_minuteswestと、2)夏時間(DST)規則のタイプを示すフィールドtz_dsttime 現在の地域における効果。

This second field is not used under Linux and is always zero. (See also settimeofday(2).)

この2番目のフィールドはLinuxでは使用されず、常にゼロです。 (settimeofday(2)も参照してください)。

 

 

Users access and setuid

ユーザーのアクセスとsetuid

Sometimes, you need to install hwclock setuid root.

場合によっては、hwclock setuid rootをインストールする必要があります。

If you want users other than the superuser to be able to display the clock value using the direct ISA I/O method, install it setuid root.

スーパーISA以外のユーザーがダイレクトISA I / Oメソッドを使用してクロック値を表示できるようにするには、setuid rootをインストールします。

If you have the /dev/rtc interface on your system or are on a non-ISA system, there’s probably no need for users to use the direct ISA I/O method, so don’t bother.

あなたのシステムに/ dev / rtcインターフェースを持っているか、ISA以外のシステムにいる場合は、ユーザがダイレクトISA I / Oメソッドを使う必要はないかもしれないので、気にしないでください。

 

In any case, hwclock will not allow you to set anything unless you have the superuser real uid.

いずれにせよ、hwclockでは、スーパーユーザーの本当のuidを持っていない限り、何も設定することができません。
(This is restriction is not necessary if you haven’t installed setuid root, but it’s there for now).

(これは、setuid rootをインストールしていない場合は必要ありませんが、現在はそこにあります)。

 

 

 

How hwclock Accesses the Hardware Clock

hwclockがハードウェアクロックにアクセスする方法

hwclock uses many different ways to get and set Hardware Clock values.

hwclockはハードウェアクロックの値を取得および設定するためにさまざまな方法を使用します。
The most normal way is to do I/O to the device special file /dev/rtc, which is presumed to be driven by the rtc device driver.

最も一般的な方法は、デバイス特殊ファイル /dev/rtc に対して I/O を行うことです。

これは、rtcデバイスドライバによって駆動されると推定されます。
However, this method is not always available.

ただし、この方法は常に利用可能なわけではありません。
For one thing, the rtc driver is a relatively recent addition to Linux.

1つ目は、rtcドライバはLinuxに比較的最近追加されたドライバです。
Older systems don’t have it.

古いシステムにはそれがありません。
Also, though there are versions of the rtc driver that work on DEC Alphas, there appear to be plenty of Alphas on which the rtc driver does not work (a common symptom is hwclock hanging).

また、DEC Alphasで動作するrtcドライバのバージョンもありますが、rtcドライバが動作しないアルファがたくさんあるようです(一般的な症状はhwclockがぶら下がっています)。

 

Moreover, recent Linux systems have more generic support for RTCs, even systems that have more than one, so you might need to override the default by specifying /dev/rtc0 or /dev/rtc1 instead.

さらに、最近のLinuxシステムでは、複数のシステムを持つシステムであっても、RTCをより一般的にサポートしているため、代わりに /dev/rtc0 または /dev/rtc1 を指定してデフォルトを上書きする必要があります。

 

On older systems, the method of accessing the Hardware Clock depends on the system hardware.

古いシステムでは、ハードウェアクロックにアクセスする方法はシステムのハードウェアによって異なります。

On an ISA system, hwclock can directly access the “CMOS memory” registers that constitute the clock, by doing I/O to Ports 0x70 and 0x71.

ISAシステムでは、hwclockは、ポート0x70および0x71へのI / Oを実行することによって、クロックを構成する “CMOSメモリ”レジスタに直接アクセスできます。
It does this with actual I/O instructions and consequently can only do it if running with superuser effective userid.

これは実際の I/O 命令で行います。したがって、スーパーユーザーの有効なユーザーIDで実行している場合にのみ実行できます。
(In the case of a Jensen Alpha, there is no way for hwclock to execute those I/O instructions, and so it uses instead the /dev/port device special file, which provides almost as low-level an interface to the I/O subsystem).

(Jensen Alphaの場合、hwclockがこれらの I/O 命令を実行する方法はないため、/dev/port デバイス特殊ファイルを使用します。これは、I/O サブシステム)。

This is a really poor method of accessing the clock, for all the reasons that user space programs are generally not supposed to do direct I/O and disable interrupts.

これは、ユーザ空間プログラムが一般的に直接 I/O を行い、割り込みを無効にすることは想定されていないという理由から、クロックにアクセスするには本当に貧弱な方法です。
Hwclock provides it because it is the only method available on ISA and Alpha systems which don’t have working rtc device drivers available.

Hwclockは、ISAとAlphaシステムで利用可能な唯一の方法であり、動作可能なrtcデバイスドライバを利用できないため、これを提供します。

On an m68k system, hwclock can access the clock via the console driver, via the device special file /dev/tty1.

m68kシステムでは、hwclockは、デバイス特殊ファイル/ dev / tty1を介して、コンソールドライバ経由でクロックにアクセスできます。

hwclock tries to use /dev/rtc.

hwclockは /dev/rtc の使用を試みます。
If it is compiled for a kernel that doesn’t have that function or it is unable to open /dev/rtc (or the alternative special file you’ve defined on the command line) hwclock will fall back to another method, if available.

その機能を持たないカーネル用にコンパイルされている場合、または/ dev / rtc(またはコマンドラインで定義した別の特殊ファイル)を開くことができない場合、hwclockは利用可能であれば別のメソッドにフォールバックします。
On an ISA or Alpha machine, you can force hwclock to use the direct manipulation of the CMOS registers without even trying /dev/rtc by specifying the –directisa option.

ISA または Alpha マシンでは、 –devirectory オプションを指定することによって、/dev/rtc を試すことなしに hwclock に CMOS レジスタの直接操作を強制することができます。

 

 

The Adjust Function

調整機能

 

The Hardware Clock is usually not very accurate.

ハードウェアクロックは通常、あまり正確ではありません。

However, much of its inaccuracy is completely predictable – it gains or loses the same amount of time every day.

This is called systematic drift.
しかし、その不正確さの多くは完全に予測可能です。毎日同じ時間を得るか失います。
これは系統的なドリフトと呼ばれます。

hwclock’s “adjust” function lets you make systematic corrections to correct the systematic drift.

hwclockの “調整”機能を使用すると、系統的な補正を行って系統的なドリフトを補正することができます。

It works like this: hwclock keeps a file, /etc/adjtime, that keeps some historical information.
これは次のように動作します:hwclock は /etc/adjtime というファイルを保持しており、履歴情報を保持しています。
This is called the adjtime file.

これはadjtimeファイルと呼ばれます。

Suppose you start with no adjtime file.

あなたがadjtimeファイルなしで始めると仮定します。

You issue a hwclock –set command to set the Hardware Clock to the true current time.
hwclock –setコマンドを発行して、ハードウェアクロックを実際の現在の時刻に設定します。
Hwclock creates the adjtime file and records in it the current time as the last time the clock was calibrated.
Hwclockはadjtimeファイルを作成し、クロックが較正された最後の時刻として現在時刻を記録します。
5 days later, the clock has gained 10 seconds, so you issue another hwclock –set command to set it back 10 seconds.
5日後、時計は10秒間になったので、別のhwclock –setコマンドを発行して10秒前に戻します。
Hwclock updates the adjtime file to show the current time as the last time the clock was calibrated, and records 2 seconds per day as the systematic drift rate.
Hwclockはadjtimeファイルを更新して、時計が最後に較正された時刻を現在の時刻として表示し、システムドリフトレートとして1日2秒を記録します。
24 hours go by, and then you issue a hwclock –adjust command.
24時間経過したら、hwclock –adjustコマンドを発行します。
Hwclock consults the adjtime file and sees that the clock gains 2 seconds per day when left alone and that it has been left alone for exactly one day.
Hwclockはadjtimeファイルを調べて、1時間放置すると1秒あたり2秒のクロックが得られ、それがちょうど1日だけ放置されていることを確認します。
So it subtracts 2 seconds from the Hardware Clock.
したがって、ハードウェアクロックから2秒を減算します。
It then records the current time as the last time the clock was adjusted.
次に、現在の時刻をクロックが最後に調整された時刻として記録します。
Another 24 hours goes by and you issue another hwclock –adjust.
別の24時間が経過し、もう1回 hwclock –adjust を発行します。
Hwclock does the same thing: subtracts 2 seconds and updates the adjtime file with the current time as the last time the clock was adjusted.

Hwclockは同じことをします:2秒を引いて、時計が調整された最後の時刻としてadjtimeファイルを現在の時刻で更新します。

Every time you calibrate (set) the clock (using –set or –systohc), hwclock recalculates the systematic drift rate based on how long it has been since the last calibration, how long it has been since the last adjustment, what drift rate was assumed in any intervening adjustments, and the amount by which the clock is presently off.

hwclockは、クロックを較正(設定)するたびに、最後の較正からどれぐらいの時間が経過したか、最後の調整からどれぐらいの時間が経過したか、どのドリフトをドリフトしているか レートは、介入調整およびクロックが現在オフになっている量で仮定された。

A small amount of error creeps in any time hwclock sets the clock, so it refrains from making an adjustment that would be less than 1 second.
hwclockはクロックを設定するたびに少量のエラー・クリープが発生するため、1秒未満の調整を行わないようにします。
Later on, when you request an adjustment again, the accumulated drift will be more than a second and hwclock will do the adjustment then.

後で調整を再度要求すると、蓄積されたドリフトは1秒以上になり、hwclockは調整を行います。

It is good to do a hwclock –adjust just before the hwclock –hctosys at system startup time, and maybe periodically while the system is running via cron.

システム起動時にはhwclock – hctosysの直前に、システムがcronで動作している間は、ちょうどhwclockを実行するとよいでしょう。

The adjtime file, while named for its historical purpose of controlling adjustments only, actually contains other information for use by hwclock in remembering information from one invocation to the next.

adjtimeファイルは、調整のみを制御するという歴史的な目的のために名前が付けられていますが、hwclockが1回の呼び出しから次の呼び出しまでの情報を記憶するためのその他の情報を含んでいます。

 

 

The format of the adjtime file is, in ASCII:

adjtimeファイルの形式は、ASCII形式です。

Line 1: 3 numbers, separated by blanks: 1) systematic drift rate in seconds per day, floating point decimal; 2) Resulting number of seconds since 1969 UTC of most recent adjustment or calibration, decimal integer; 3) zero (for compatibility with clock(8)) as a decimal integer.

行1:空白で区切られた3つの数字:1)1日あたりの体系的なドリフト率、浮動小数点小数点。 2)最新の調整または較正の1969 UTCからの結果の秒数、10進整数。 3)ゼロ(clock(8)との互換性のため)を10進整数として使用します。

 

Line 2: 1 number: Resulting number of seconds since 1969 UTC of most recent calibration.
ライン2:1番号:1969 UTCからの最新の較正結果秒数。
Zero if there has been no calibration yet or it is known that any previous calibration is moot (for example, because the Hardware Clock has been found, since that calibration, not to contain a valid time).
まだ較正が行われていない場合や、以前の較正が妥当でないことが分かっている場合(たとえば、ハードウェア時計が検出されたため、較正以降有効な時間が含まれていないなど)
This is a decimal integer.

これは10進整数です。

 

Line 3: “UTC” or “LOCAL”.
3行目: “UTC”または “LOCAL”。
Tells whether the Hardware Clock is set to Coordinated Universal Time or local time.
ハードウェアクロックが協定世界時または現地時間に設定されているかどうかを確認します。
You can always override this value with options on the hwclock command line.

この値は、hwclockコマンドラインのオプションで常に上書きすることができます。

You can use an adjtime file that was previously used with the clock(8) program with hwclock.

hwclockでclock(8)プログラムで以前に使用されていたadjtimeファイルを使用することができます。

 

 

Automatic Hardware Clock Synchronization By the Kernel
カーネルによる自動ハードウェアクロック同期
You should be aware of another way that the Hardware Clock is kept synchronized in some systems.
一部のシステムでは、ハードウェアクロックが同期された別の方法に注意する必要があります。
The Linux kernel has a mode wherein it copies the System Time to the Hardware Clock every 11 minutes.
Linuxカーネルには、11分ごとにSystem TimeをHardware Clockにコピーするモードがあります。
This is a good mode to use when you are using something sophisticated like ntp to keep your System Time synchronized.
これは、システム時間を同期させるためにntpのような洗練されたものを使用しているときに使用するのに適したモードです。
(ntp is a way to keep your System Time synchronized either to a time server somewhere on the network or to a radio clock hooked up to your system. See RFC 1305).

(ntpは、システムタイムをネットワークのどこかのタイムサーバーか、システムに接続されたラジオクロックに同期させる方法です(RFC 1305を参照)。

This mode (we’ll call it “11 minute mode”) is off until something turns it on.
このモード(「11分モード」と呼ぶ)は、何かがオンになるまでオフになっています。
The ntp daemon xntpd is one thing that turns it on.
ntpデーモンxntpdは、それをオンにするものです。
You can turn it off by running anything, including hwclock –hctosys, that sets the System Time the old fashioned way.

システム時刻を旧式に設定するhwclock –hctosysなど、何かを実行することでオフにすることができます。

If your system runs with 11 minute mode on, don’t use hwclock –adjust or hwclock –hctosys.
システムが11分モードで動作している場合は、hwclock –adjustまたはhwclock –hctosysを使用しないでください。
You’ll just make a mess.
あなたはちょうど混乱を起こすでしょう。
It is acceptable to use a hwclock –hctosys at startup time to get a reasonable System Time until your system is able to set the System Time from the external source and start 11 minute mode.

起動時にhwclock –hctosysを使用して、システムが外部ソースからシステム時間を設定して11分モードを開始できるようになるまで、適切なシステム時間を取得することは許容されます。

 

ISA Hardware Clock Century value

ISAハードウェアクロック世紀値

There is some sort of standard that defines CMOS memory Byte 50 on an ISA machine as an indicator of what century it is.
何世紀かの指標として、ISAマシン上のCMOSメモリByte 50を定義する何らかの標準があります。
hwclock does not use or set that byte because there are some machines that don’t define the byte that way, and it really isn’t necessary anyway, since the year-of-century does a good job of implying which century it is.

hwclockはそのバイトを定義していないマシンがいくつか存在するので、そのバイトを使用したり設定したりすることはありません。実際には必要ありません。なぜなら、何世紀にもわたる世紀を意味する良い仕事をしているからです。

If you have a bona fide use for a CMOS century byte, contact the hwclock maintainer; an option may be appropriate.

CMOS世紀のバイトを真に使用している場合は、hwclockの管理者に連絡してください。 オプションが適切かもしれない。

Note that this section is only relevant when you are using the “direct ISA” method of accessing the Hardware Clock.
このセクションは、ハードウェアクロックにアクセスする「ダイレクトISA」方式を使用している場合にのみ関係します。
ACPI provides a standard way to access century values, when they are supported by the hardware.

ACPIは、ハードウェアでサポートされている世紀の値にアクセスするための標準的な方法を提供します。

ENVIRONMENT VARIABLES
TZ

 

FILES
/etc/adjtime /usr/share/zoneinfo/ (/usr/lib/zoneinfo on old systems) /dev/rtc /dev/rtc0 /dev/port /dev/tty1 /proc/cpuinfo

 

SEE ALSO
date(1), gettimeofday(2), settimeofday(2), crontab(1), tzset(3)

 

 

 

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください