■「ntp」に付属のntptimeコマンドが便利。
「/usr/bin/ntpdc」でクライアントやサーバが一覧出来るのも良い。
パッケージ付属のコマンドはちゃんと見ておくべきですね。。。
$ /usr/sbin/ntptime
ntp_gettime() returns code 0 (OK)
time d2ff5943.5b6de000 Tue, Mar 6 2012 0:24:51.357, (.357145),
maximum error 531016 us, estimated error 16 us
ntp_adjtime() returns code 0 (OK)
modes 0x0 (),
offset 0.000 us, frequency 0.000 ppm, interval 1 s,
maximum error 531016 us, estimated error 16 us,
status 0x1 (PLL),
time constant 7, precision 1.000 us, tolerance 500 ppm,
■ntp_gettimeについて
参考:マニュアルページ ― NTP_GETTIME
http://www.nxmnpg.com/ja/2/ntp_gettime
■「ntptime」コマンドのリターンコードを見るのが最も近道のようだ。
$ for num in `seq 0 300`;do /usr/sbin/ntptime | grep return;sleep 1;done
ntp_gettime() returns code 5 (ERROR)
ntp_adjtime() returns code 5 (ERROR)
0 TIME_OK 全てが OK で、閏秒の警告もありません。
1 TIME_INS 正の閏秒の警告です。 この日の最後の 23:59:59 の後に追加の 1 秒が挿入されます。
2 TIME_DEL 負の閏秒の警告です。 この日の最後の 23:59:59 はスキップされます。
3 TIME_OOP 閏秒の経過中です。
4 TIME_WAIT 閏秒が発生しました。
5 TIME_ERROR クロックが同期していません。
■例えば以下のように強制手動同期
$ sudo /etc/init.d/ntp stop; \
sudo /usr/sbin/ntpdate ntp.nict.jp; \
sudo /etc/init.d/ntp start
■tcpdumpで監視中に2回程パケットが流れた時点でステータスが変わった。
$ sudo tcpdump -X -nvvv -i eth0 udp port 123 | grep Timestamp
Reference Timestamp: 3539947147.824472069 (2012/03/05 23:39:07)
Originator Timestamp: 3539948692.818381011 (2012/03/06 00:04:52)
Receive Timestamp: 3539948649.433728277 (2012/03/06 00:04:09)
Transmit Timestamp: 3539948718.415692448 (2012/03/06 00:05:18)
Originator - Receive Timestamp: -43.384652704
Originator - Transmit Timestamp: +25.597311496
Reference Timestamp: 3539948761.000000000 (2012/03/06 00:06:01)
Originator Timestamp: 3539948718.415692448 (2012/03/06 00:05:18)
Receive Timestamp: 3539948761.819168806 (2012/03/06 00:06:01)
Transmit Timestamp: 3539948761.819169580 (2012/03/06 00:06:01)
Originator - Receive Timestamp: +43.403476327
Originator - Transmit Timestamp: +43.403477132
■ちなみに。。。STEPモードはパケットログに載る。
$ grep -B 5 "STEP" 123.log | grep "STEP\|Timestamp"
Reference Timestamp: 3539943710.283126950 (2012/03/05 22:41:50)
Originator Timestamp: 0.000000000 [|ntp]
0x0030: e300 06ec 0000 0000 0000 0015 5354 4550 ............STEP
Transmit Timestamp: 3539945922.102021895 (2012/03/05 23:18:42)
Originator - Receive Timestamp: 0.000000000
Originator - Transmit Timestamp: 3539945922.102021895 (2012/03/05 23:18:42)
0x0020: 0000 0000 0000 0018 5354 4550 d2ff 411e ........STEP..A.
Transmit Timestamp: 3539945924.102016717 (2012/03/05 23:18:44)
Originator - Receive Timestamp: +0.095962613
Originator - Transmit Timestamp: +1.889134585
0x0020: 0000 0000 0000 001a 5354 4550 d2ff 411e ........STEP..A.
■STEPモードで1秒の誤差なら5分程度で修正出来るようだが、
詳しい検証は、また後日としよう。
$ for num in `seq 0 300`;do /usr/sbin/ntptime | grep return;sleep 1;done
ntp_gettime() returns code 0 (OK)
ntp_adjtime() returns code 0 (OK)
■dateコマンドで1秒進める
$ echo `date '+%H:%M:%S'` | \
awk -F\: '{printf "%02d:%02d:%02d" ,$1 ,$2 ,($3+61)%60}' | \
sudo date '+%H:%M:%S' --set "`xargs`"
■dateコマンドで1秒戻す
$ echo `date '+%H:%M:%S'` | \
awk -F\: '{printf "%02d:%02d:%02d" ,$1 ,$2 ,($3+59)%60}' | \
sudo date '+%H:%M:%S' --set "`xargs`"
さて、もうこんな時間か。。。