今天遇到一个ntp的同步问题。服务器上配置好了ntpd,在启动前也手动进行过同步,但是过段时间ntpq查询发现服务器即便能选出同步服务器,但是系统的时间偏差越来越大。
服务器上实际有2个时钟,一个是主板电池驱动的硬件时间(RTC或者CMOS时间),另外就是系统时间。服务器启动时会从RTC里读取一次时间,之后便靠中断来计时。可以设置ntpd同步后讲时间写回RTC.
语法:adjtimex [OPTION]… 主要参数说明:
-p, –print 输出内核时间变量的值
-t, –tick val 设置内核时钟计数间隔(微秒)
-f, –frequency newfreq 设置系统时钟偏移量
-c, –compare[=count] 比较系统时钟和CMOS时钟
-i, –interval tim 设置时钟比较间隔时间 sec)
-l, –log[=file] 将当前时间记录到文件中
–host timeserver 查询时间服务器
-u, –utc 将CMOS时钟设置成UTC
在服务器上先比较一下系统时间和CMOS时间
# adjtimex --compare
--- current --- -- suggested --
cmos time system-cmos error_ppm tick freq tick freq
1381503971 1.751318
1381503981 1.721794 -2952.4 10000 -1573016
1381503991 1.692179 -2961.5 10000 -1573016 10029 2456959
1381504001 1.662619 -2956.0 10000 -1573016 10029 2097584
1381504011 1.633055 -2956.4 10000 -1573016 10029 2122584
1381504021 1.603491 -2956.4 10000 -1573016 10029 2122584
1381504031 1.573928 -2956.3 10000 -1573016 10029 2117896
1381504041 1.544361 -2956.7 10000 -1573016 10029 2142896
然后使用
# adjtimex -t 10029
修改一下tick,重新手动同步后,再启动ntpd发现时间终于正常了。