te +%j
(或是执行 ``date +%s'' ) 你现在手上有三个数字 (二个校正日期及一个正确时间) 於是你可以开始计算偏差率了.
计算校正因子 当你在某一分钟执行 ``date'' 程式时, 你机器的本地时间是慢还是快呢? 如果是快了, 你必须将之减去一些秒数以符合正确时间, 所以你应该写下一个负的偏差数值. 如果是慢了,你必须将之加上一些秒数以符合正确时间, 所以你应该写下一个正的偏差数值.
现在将二个校正日期相减. 如果之前你使用的是 ``date +%j'', 则数值所代表意义为一年的第几天 (1-365, 或 1-366 如果是闰年). 如果自从你上一次设定时钟到现在经过1 月1 日你还须要将第二个校正日期加 365 (或 366) 如果之前你使用的是 ``date +%s'' 则数值的单位为秒数, 你必须将之除以 86400 以便取得日数.
如果你的档案 /etc/adjtime 中已经有校正因子, 你必须将先前已校正过的秒数考虑进来, 如果你校正过度, 这个校正因子的正负号将与你量测到偏差数值相反; 如果你校正不足则二者正负号相同. 将旧的校正因子乘以日数, 然後加上新获得的偏差秒数 (附注-- 如果二者正负号相同, 你将取得一个较大的偏差数值, 如果二者正负号相反, 你将取得一个较小的偏差数值).
接著将这个总偏差秒数除以日数以便取得新的校正因子, 然後将档案 /etc/adjtime 中旧的校正因子代换成新的. 最後写下新的校正日期 (以秒数或日数为单位) 以便下次使用.
这里是我的 /etc/adjtime 档案内容:
-9.600000 845082716 -0.250655
(注意每天 9.6 秒则一个月将近有 5 分钟的偏差!)
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
3. xntpd 简介 你的系统实际上有二个时钟-- 一个是当系统关机继续使用电池电力维持计时功能的 ``real time clock'' (也就是所谓的 ``CMOS 时钟'', ``硬体时钟'', 或 ``RTC'') 而另一个是 ``kernel clock'' (有时称为 ``软体时钟'' 或 ``系统时钟'') 系统时钟的跳动是以计时器的中断信号为基准并在开机时从CMOS 时钟处载入初始值. 这二个时钟有不同的时间偏差率, 所以二个时钟上的时间会逐渐地产生偏差, 而且也会与 ``真正的''时间产生偏差.
在 xntpd 文件中所述及的 ``the clock'' 就是指 ``kernel clock''. 当你执行 xntpd 或 timed 程式时 (或是其他使用到 adjtimex 系统呼叫的程式) linux 作业系统会假定系统时钟比 CMOS 时钟准确, 而且会在开机後每隔 11 分钟重新设定一次 CMOS 时间 (一直到重开机为止). 这意味著 ``clock'' 程式不再知道上一次重新设定 CMOS 时钟的正确时间, 所以你不可以使用档案 /etc/adjtime 中的校正因子. 你可以在开机执行档上使用 ntpdate 程式以便在初次执行 xntpd 程式之前与校时伺服器对时. 如果你在开机的时候一直无法连上准确的校时源, 这可能会让你面临到一些困境-- 实际上 xntpd 不是被设计来在那种情况之下使用的.
Xntpd 包含了许多无线电时钟的驱动程式, 并且也可以被设定在一定的周期内拨电话至 NIST 的电话拨接电脑校时服务 (当你设定好电话拨接的周期之後最好先计算一下电话帐单的花费). 在与其他的校时源失去联络一段时间之後这个方式也能提供系统时钟一个校正因子.
上一页 [1] [2] [3] [4] 下一页 |
|