先月、サーバーの時刻設定を行う作業を行い、手動で時刻サーバーと同期を取る手順を入れていた。

本番サーバーでの作業は作業手順書を書いて、オペレーターに引き継いで行わなければならないので、時刻調整の所で下記メッセージを確認するように手順を書いた。

"
DD MMM hh:mm:ss ntpdate[xxxxx]: step time server 123.456.789.098 offset -xx.xxxxxx sec
"

実際に作業をお願いしたらntpdateコマンドを実行したところで問い合わせの電話が鳴った。

"
DD MMM hh:mm:ss ntpdate[xxxxx]: step time server 123.456.789.098 offset -xx.xxxxxx sec
"
ではなく
"
DD MMM hh:mm:ss ntpdate[xxxxx]: adjust time server 123.456.789.098 offset -xx.xxxxxx sec
"
だけれども正常に作業が出来ているのか?と。

"step"か"adjust"かの違いなので大丈夫ですと答えた後にソースを調べてみた。
すると、調整した秒数が0.5秒以上か未満かで出力メッセージが変わることがわかりました。


ntpdate.h(64)
#define NTPDATE_THRESHOLD (FP_SECOND >> 1) /* 1/2 second */

ntpdate.c(1295)
if (always_step) {
dostep = 1;
} else if (never_step) {
dostep = 0;
} else {
absoffset = server->soffset;
if (absoffset < 0)
absoffset = -absoffset;
dostep = (absoffset >= NTPDATE_THRESHOLD || absoffset < 0);
}

if (dostep) {
if (simple_query || l_step_systime(&server->offset)) {
msyslog(LOG_NOTICE, "step time server %s offset %s sec",
stoa(&server->srcadr),
lfptoa(&server->offset, 6));
}
} else {
#if !defined SYS_WINNT && !defined SYS_CYGWIN32
if (simple_query || l_adj_systime(&server->offset)) {
msyslog(LOG_NOTICE, "adjust time server %s offset %s sec",
stoa(&server->srcadr),
lfptoa(&server->offset, 6));
}


調整幅が0.5秒未満の場合にはメッセージ"adjust time server・・・"が、0.5秒以上の場合にはメッセージ"step time server・・・"が表示されます。

"
[root@TESTSERVER root]# ntpdate -q 123.456.789.098
server 123.456.789.098, stratum 2, offset -0.000586, delay 0.02568
15 Sep 16:59:32 ntpdate[20923]: adjust time server 123.456.789.098 offset -0.000586 sec
[root@TESTSERVER root]# date
Tue Sep 15 16:59:36 JST 2009
[root@TESTSERVER root]# date 09151700
Tue Sep 15 17:00:00 JST 2009
[root@TESTSERVER root]# ntpdate -q 123.456.789.098
server 123.456.789.098, stratum 2, offset -15.117865, delay 0.02570
15 Sep 17:00:04 ntpdate[20926]: step time server 123.456.789.098 offset -15.117865 sec
[root@TESTSERVER root]# ntpdate 123.456.789.098
15 Sep 16:59:55 ntpdate[20927]: step time server 123.456.789.098 offset -15.117872 sec
[root@TESTSERVER root]# ntpdate -q 123.456.789.098
server 203.214.181.109, stratum 2, offset -0.000139, delay 0.02568
15 Sep 17:01:32 ntpdate[20932]: adjust time server 123.456.789.098 offset -0.000139 sec
[root@TESTSERVER root]# ntpdate 123.456.789.098
15 Sep 17:01:32 ntpdate[20932]: adjust time server 123.456.789.098 offset -0.000139 sec
"

上記のように、-qオプションをつけたときにもstepかadjustかを確認することが出来ます。

勉強になりました。
RHEL3/4で確認(ソースはRHEL5の物)