所有 Linux 发行版都安装了旧的 clock(8)
或更新的 hwclock(8)
,但都没有校正因子。有些发行版可能还安装了 adjtimex(8)
,或者它们可能将其作为可选组件包含在 CD 中(或者您可以从常用的 Linux 归档站点下载它)。一些发行版还包含一个在 X 窗口中运行的图形时钟设置程序,但这些程序是为交互式使用而设计的,系统仍然会安装 clock(8)
或 hwclock(8)
以便在启动脚本中使用。
Clock(8)
要求您手动计算校正因子,但 hwclock(8)
会在您使用它重置 RTC 时自动计算(使用另一个程序设置 RTC 会干扰漂移校正,因此如果您使用校正因子,请始终使用同一个程序)。如果您的系统较旧,仍然使用 clock(8)
并且您想升级,您可以在 “util-linux
” 软件包的版本 2.7 或更高版本中找到 hwclock(8)
。 有关更多信息,请参阅手册页。
为了向后兼容,hwclock(8)
的手册页可能被称为 “clock
”,因此请尝试这两个名称。 Hwclock(8)
将响应为 clock(8)
编写的命令,但结果可能不相同——特别是,“hwclock -a
” 与 “clock -a
” 不完全相同,因此如果您要升级到 hwclock
,我建议将启动脚本中所有对 “clock
” 的引用替换为使用 hwclock
的本机命令。
启动脚本因发行版而异,因此您可能需要搜索一下才能找到设置时钟的位置。 典型位置是 /etc/rc.local
、/etc/rc.d/rc.sysinit
、/etc/rc.d/boot
或一些类似的位置。
RTC 的校正因子存储在 /etc/adjtime
中。 Red Hat 在 /etc/sysconfig/clock
中有一个脚本,用于控制 hwclock
的选项。
当您设置时钟以确定漂移率时,请记住您当地的电话报时可能准确也可能不准确。 如果您没有短波收音机或 GPS 接收器,您可以拨打 (303)499-7111 听到 WWV 的音频馈送(这是拨打到科罗拉多州博尔德的收费电话)。 它会在三分钟后切断您的电话,但这应该足够您设置时钟了。 USNO 和加拿大的 CHU 也有电话报时服务,但我更喜欢 WWV 的,因为在报时和“哔”声之间有更多时间。 您还可以使用 ntpd
附带的 ntpdate
程序从网络时间服务器获取时间,并且在 www.time.gov 上有一个 javaclock。
在任何情况下,您设置的都是系统时钟,而不是 RTC(有关要使用的格式,请参阅 date
命令的手册页)。 然后使用 hwclock
设置 RTC 并计算漂移率。 如果您手动执行此操作,您应该能够在几秒钟内设置好,并在几周后获得漂移率的合理近似值。 然后您可以运行 adjtimex(8)
来微调系统时钟。
Adjtimex(8)
允许用户调整内核的时间变量,从而改变系统时钟的速度(您必须以 “root” 身份登录才能执行此操作)。 它被巧妙地设计为将系统时钟与 RTC 进行比较,使用与 clock(8)
或 hwclock(8)
相同的校正因子,存储在 /etc/adjtime
中。 因此,一旦您确定了 RTC 的漂移率,就可以相当简单地校正系统时钟。 一旦您使其以正确的速度运行,您就可以在启动脚本中添加一行,以便在启动时设置正确的内核变量。 由于 adjtimex(8)
旨在与 clock(8)
或 hwclock(8)
一起使用,因此它包含了一个针对 “每 11 分钟” bug 的解决方法。
在您安装了 adjtimex(8)
之后,您可以通过键入 “man 8 adjtimex
” (还有一个 adjtimex(2)
手册页,这不是您想要的) 以及阅读 /usr/doc/adjtimex-1.3/README
中的 README
文件来获取有关设置它的更多信息(路径中的版本号将是当前 adjtimex(8)
的版本)。
Xntpd
(NTPv3) 已被 ntpd
(NTPv4) 取代; 早期版本不再维护。
Ntpd
是用于跨网络同步时钟的标准程序,它附带一个您可以连接到的公共时间服务器列表。 与此处描述的其他程序相比,它的设置可能有点复杂,但如果您对此类事情感兴趣,我强烈建议您无论如何都应该查看一下。
关于 ntpd
的信息的 “主基地” 是 NTP 网站 http://www.eecis.udel.edu/~ntp/,其中还包含指向各种有趣的时间相关内容(包括其他操作系统的软件)的链接。 一些 Linux 发行版在 CD 中包含了 ntpd
。 http://www.eecis.udel.edu/~mills/ntp/clock2.html 上有一个公共时间服务器列表。
ntpd
中一个相对较新的功能是 “burst mode”,它是为仅间歇性拨号访问互联网的机器设计的。
Ntpd
包含相当多无线电时钟的驱动程序(尽管似乎有些驱动程序比其他驱动程序得到更好的支持)。 大多数无线电时钟是为商业用途设计的,成本数千美元,但也有一些更便宜的替代方案(在后面的章节中讨论)。 过去大多数是 WWV 或 WWVB 接收器,但现在它们似乎大多是 GPS 接收器。 NIST 在其网站 http://www.boulder.nist.gov/timefreq/links.htm(页面底部附近)上有一个 PDF 文件,其中列出了无线电时钟制造商。 NTP 网站还在 http://www.eecis.udel.edu/~ntp/hardware.htm 和 http://www.eecis.udel.edu/~mills/ntp/refclock.htm 上包含许多无线电时钟制造商的链接。 任何列表在任何给定时间都可能不是最新的 :-)
。 ntpd
的驱动程序列表位于 http://www.eecis.udel.edu/~ntp/ntp_spool/html/refclock.htm。
Ntpd
还包括几个拨号时间服务的驱动程序。 这些都是长途(收费)电话,因此在使用它们之前,请务必计算对您的电话费的影响。
Xntpd
最初是为全时连接到网络时间服务器或无线电时钟的机器编写的。 理论上,它也可以用于仅间歇性连接的机器,但 Richard Curnow 无法使其按照他想要的方式工作,因此他编写了 “chrony
” 作为我们这些仅在拨号连接到 ISP 时才具有网络访问权限的人的替代方案(这与 ntpd
的新 “burst mode” 旨在解决的问题相同)。 当前版本的 chrony
包括 RTC 的漂移校正,适用于长时间关闭的机器。
您可以从 Richard Curnow 的网站 http://www.rrbcurnow.freeuk.com/chrony 或 http://go.to/chrony 获取更多信息。 还有两个 chrony
邮件列表,一个用于公告,一个用于用户讨论。 有关信息,请发送电子邮件至 chrony-users-subscribe@egroups.com
或 chrony-announce-subscribe@egroups.com
Chrony 通常仅以源代码形式分发,但 Debian 一直在其 “unstable” 集合中包含二进制文件。 源代码文件也可在常用的 Linux 归档站点获得。
另一个选择是 DJ Bernstein 的 clockspeed
程序。 它从网络时间服务器获取时间,并每三秒重置系统时钟。 它也可以用于同步 LAN 上的多台机器。
我有时在访问他的网站 http://Cr.yp.to/clockspeed.html 时遇到问题,因此如果您收到 DNS 错误,请在另一天重试。 如果我获得更好的信息,我将尝试更新本节。