管理精确的日期和时间

Avi Alkalay

Brad Knowles - 建议使用 pool.ntp.org 和 NTP 的 stratum 2 公共时间服务器

Kent Borg - 建议使用 ntpq 而不是 ntpdc

Yura Moron - 关于 ntpq 和 ntpdc 信息的良好解释

Takeo Nakano -

SHAKI -

Mihaly Gyulai -

Philippe Wautelet -

Kemal Ökmen -

2005-11-18

修订历史
修订 2005-11-182005 年 11 月 18 日修订者:Avi
包含土耳其语翻译的链接
修订 2005-10-122005 年 10 月 12 日修订者:Avi
巴西 zic 文件现在是外部文件并已更新
修订 2005-05-032005 年 5 月 3 日修订者:Avi
包含法语翻译的链接
修订 1.0.82004-10-29修订者:Mihaly Gyulai
匈牙利语翻译、chorny 部分和第一个部分
修订 1.0.72004 年 7 月 9 日修订者:avi
免责声明靠近许可证,让人们知道他们可以在未经许可的情况下进行翻译。一些短语中的小修复。
修订 1.0.62004 年 2 月 25 日修订者:avi
包含致谢和俄语翻译的链接。
修订 1.0.52003 年 7 月 5 日修订者:avi
更改了公共时间服务器列表 URL。添加了 pool.ntp.org。
修订 1.0.42002 年 12 月 21 日修订者:avi
添加了日语翻译链接和致谢。
修订 1.0.32002 年 8 月 24 日修订者:avi
修复了错误的屏幕和程序列表宽度。
修订 1.0.22002 年 8 月 4 日修订者:avi
链接到公共时间服务器页面。
修订 1.0.12002 年 5 月 7 日修订者:avi
最终 XML 转换。文件重组。
修订 1.02002 年 4 月 28 日修订者:avi
完成图像。
修订 0.82002 年 4 月 27 日修订者:avi
根据贡献,从 ntpdc 示例切换到 ntpq。
修订 0.8.12002 年 4 月 20 日修订者:avi
改进了图形。链接到其他文档位置。
修订 0.82002 年 4 月 14 日修订者:avi
更好调整 NTP 图形。
修订 0.762002 年 4 月 13 日修订者:avi
包含架构图形。
修订 0.752002 年 4 月 10 日修订者:avi
拼写检查。使用 DocBook XSLT 1.50。
修订 0.652002 年 3 月 31 日修订者:avi
升级到 XML 4.1.2 DocBook 格式
修订 0.62002 年 3 月 29 日修订者:avi
完成了 Linux 上的时区机制。创建了附录。现在只需要图纸。
修订 0.42002 年 3 月 24 日修订者:avi
定义了所有骨架。编写了所有命令示例。
修订 0.22002 年 3 月 19 日修订者:avi
第一个 DocBook 版本

目录
1. 我们为什么需要精确的时钟?
1.1. 硬件时钟取决于哪些因素?
2. 计算机全局日期和时间概念
3. 什么是时区?
3.1. 夏令时
3.2. 时区示例
3.3. Linux 上的时区机制
4. Linux Box 的正确设置
4.1. 设置时区
4.2. 设置硬件时钟
5. 精确的全局时间同步
5.1. NTP:网络时间协议
5.2. 构建简单的时间同步架构
5.3. NTP 配置
5.4. 观看您的 Box 同步
5.5. 配置为在启动时自动运行 NTP
6. 使用 chrony 程序进行精确计时
6.1. chronyntp 套件有何不同?
6.2. 如何使用 chrony
A. 关于本文档

1. 我们为什么需要精确的时钟?

如果我们的计算机从不连接到其他计算机(或使用时钟的其他设备),则时钟的精度本身并不关键,它取决于用户的需求。但是,某些使用网络的程序依赖于精确的日期和时间。以下是一些您可能需要精确时钟的示例

当然,也可以使用计算机调整我们的手表时钟。


1.1. 硬件时钟取决于哪些因素?

这里我们简要介绍一下硬件时钟的精度。

在 PC 中,我们发现石英振荡器维护硬件时钟。振荡器的频率被划分,最后我们得到一个计数器,每秒步进一次(实际上更复杂,但现在对我们来说足够了)。即使计算机关闭,时钟振荡器也会运行,因此在启动计算机(和启动 Linux)后,硬件时钟可以给出实际时间的值。该时钟的稳定性主要取决于周围环境的温度,但也取决于气压和电源电压的稳定性。硬件时钟在短期内不准确,但在长期内,它与精确时间显示出一定的差异。由于我们可以不断地比较硬件时钟的频率和精确时钟,我们可以计算硬件时钟的频率,从而创建精确的时间。如果这个精确时钟在您的 LAN(局域网)内,您的 Linux 机器时钟的精度在 0.01 秒以内。如果您使用互联网来实现此目的,则您的时钟精度将在精确时间的 0.2 秒以内。


2. 计算机全局日期和时间概念

要确定某个行星区域的当前时间,计算机需要以下两个信息

  1. 正确的 UTC(格林威治标准时间,但不是 GMT)时间

  2. 区域当前的时区

对于计算机,还有硬件时钟,操作系统使用它作为基础来设置其时间。

操作系统日期和时间(从现在开始我们只使用日期时间)在启动时设置,通过一些脚本读取硬件时钟,进行时区计算(BIOS 中没有存储时区数据)并设置操作系统。在同步之后,BIOS 和操作系统时间彼此独立。因此,过一段时间后,它们可能会有几秒钟的差异。哪个是正确的?如果您不进行特殊配置,则都不是。

我们将在此处讨论如何使它们都全局 100% 精确


3. 什么是时区?

时区是世界地球仪的地理划分,每个时区为 15 度,从英国格林威治开始,旨在帮助人们了解世界另一部分现在是什么时间。

如今,它更多的是一种政治划分而不是地理划分,因为有时人们需要与不太远的地方的人们拥有相同的时间。出于节能的原因,我们今天有了 夏令时,这也是时区的一种变体。

时区通常由您所在国家的政府或一些天文机构定义,并用 3 或 4 个字母表示。有关示例,请参见 第 3.2 节

使用 timezoneconverter.com 了解全球任何地方的当前时间。


3.1. 夏令时

出于节能原因,政府创建了夏令时。我们的时钟提前了一个小时,这使我们的日子看起来更长。实际上,真正发生的是时区变化。原始时间 (UTC) 仍然存在,并且将永远存在。

稍后我们将了解如何在 Linux 中自动启用和禁用 DST


3.2. 时区示例

没有什么比示例更好的了

表 1. 巴西时区。相对于 UTC 的偏移

名称和偏移DST 名称和偏移地点
BREST -2:00BREDT -1:00费尔南多·迪诺罗尼亚
BRST -3:00BRDT -2:00圣保罗、里约热内卢、巴西利亚、米纳斯吉拉斯州、东北地区、南部地区等
BRWST -4:00BRWDT -3:00西部地区
BRAST -5:00BRADT -4:00阿克里

请向我发送像美国时区表这样的贡献。


3.3. Linux 上的时区机制

Linux 系统使用基于 GLIBC 动态时区,基于/etc/localtime. 此文件是指向(或复制)区域信息文件的链接,通常位于/usr/share/zoneinfo目录。

从地理物理学的角度来看,世界上只有 360o/15o=24 个时区。但是为了让人们更容易,并适应所有政治变化(如夏令时),您会在/usr/share/zoneinfo中找到数百个 zoneinfo 文件,每个文件对应于每个世界城市、国家等。

像巴西这样的一些国家没有固定的夏令时开始日期。它每年都会在夏季前几个月定义,您最终可能会遇到必须更改 zoneinfo 文件的情况,该文件是由 zic 从这样的文本文件编译而来的。

示例 1. 巴西时区信息文本文件

# Brazil Time Zones
#
# Brazilian Time Zones are:
# BREST: East of Brasilia. Fernando de Noronha.
# BRST:  Brasilia, São Paulo, Rio, Northeast, South etc
# BRWST: West of Brasilia. Mato Grosso, Manaus
# BRAST: Acre.
#
# In daylight saving time, letter 'S' changes to 'D'.
# All the brazilian daylight changes can be found here:
#   http://pcdsh01.on.br/
#   http://pcdsh01.on.br/verao1.html
#
# To install, make:
#
# # zic Brazil.txt
#
# Zone files will be installed in /usr/share/zoneinfo (depends on your
# distribution). Then, make a symbolic link from your zone to /etc/localtime:
#
# # cd /etc; ln -sf /usr/share/zoneinfo/Brazil/Brasilia localtime
#
#
# If you have updates and new standards to this file please send to
# Avi Alkalay (avi @ unix.sh)
# Fred Neves (fneves @ registro.br)
#
# Last update: 12 Oct 2005
#
#
# This file is available at
#
# http://avi.alkalay.net/software/zoneinfo/
#

# Rule  NAME    FROM    TO      TYPE    IN    ON      AT      SAVE    LETTER/S
Rule    Brazil  1931    1932    -       Oct    3      00:00   1:00    D
Rule    Brazil  1932    1933    -       Mar   31      00:00   0       S
Rule    Brazil  1949    only    -       Dec    1      00:00   1:00    D
Rule    Brazil  1950    only    -       Apr   30      00:00   0       S
Rule    Brazil  1950    1952    -       Dec    1      00:00   1:00    D
Rule    Brazil  1951    only    -       Apr   16      00:00   0       S
Rule    Brazil  1952    only    -       Mar   31      00:00   0       S
Rule    Brazil  1953    only    -       Feb   28      00:00   0       S
Rule    Brazil  1963    only    -       Oct   23      00:00   1:00    D
Rule    Brazil  1964    only    -       Mar    1      00:00   0       S
Rule    Brazil  1965    only    -       Jan   31      00:00   1:00    D
Rule    Brazil  1965    only    -       Mar   31      00:00   0       S
Rule    Brazil  1965    only    -       Dec    1      00:00   1:00    D
Rule    Brazil  1966    1968    -       Mar    1      00:00   0       S
Rule    Brazil  1966    1967    -       Nov    1      00:00   1:00    D
Rule    Brazil  1984    only    -       Nov    2      00:00   1:00    D
Rule    Brazil  1985    only    -       Mar   15      00:00   0       S
Rule    Brazil  1985    only    -       Nov    2      00:00   1:00    D
Rule    Brazil  1986    only    -       Mar   15      00:00   0       S
Rule    Brazil  1986    only    -       Oct   25      00:00   1:00    D
Rule    Brazil  1987    only    -       Feb   14      00:00   0       S
Rule    Brazil  1987    only    -       Oct   25      00:00   1:00    D
Rule    Brazil  1988    only    -       Feb    7      00:00   0       S
Rule    Brazil  1988    only    -       Oct   16      00:00   1:00    D
Rule    Brazil  1989    only    -       Jan   29      00:00   0       S
Rule    Brazil  1989    only    -       Oct   15      00:00   1:00    D
Rule    Brazil  1990    only    -       Feb   11      00:00   0       S
Rule    Brazil  1990    only    -       Oct   21      00:00   1:00    D
Rule    Brazil  1991    only    -       Feb   17      00:00   0       S
Rule    Brazil  1991    only    -       Oct   20      00:00   1:00    D
Rule    Brazil  1992    only    -       Feb    9      00:00   0       S
Rule    Brazil  1992    only    -       Oct   25      00:00   1:00    D
Rule    Brazil  1993    only    -       Jan   31      00:00   0       S
Rule    Brazil  1993    only    -       Oct   17      00:00   1:00    D
Rule    Brazil  1994    only    -       Feb   20      00:00   0       S
Rule    Brazil  1994    only    -       Oct   16      00:00   1:00    D
Rule    Brazil  1995    only    -       Feb   19      00:00   0       S
Rule    Brazil  1995    only    -       Oct   15      00:00   1:00    D
Rule    Brazil  1996    only    -       Feb   11      00:00   0       S
Rule    Brazil  1996    only    -       Oct   06      00:00   1:00    D
Rule    Brazil  1997    only    -       Feb   16      00:00   0       S
Rule    Brazil  1997    only    -       Oct   06      00:00   1:00    D
Rule    Brazil  1998    only    -       Mar   01      00:00   0       S
Rule    Brazil  1998    only    -       Oct   11      00:00   1:00    D
Rule    Brazil  1999    only    -       Feb   21      00:00   0       S
Rule    Brazil  1999    only    -       Oct    3      00:00   1:00    D
Rule    Brazil  2000    only    -       Feb   27      00:00   0       S
Rule    Brazil  2000    only    -       Oct    8      00:00   1:00    D
Rule    Brazil  2001    only    -       Feb   18      00:00   0       S
Rule    Brazil  2001    only    -       Oct   14      00:00   1:00    D
Rule    Brazil  2002    only    -       Feb   17      00:00   0       S
Rule    Brazil  2002    only    -       Nov    3      00:00   1:00    D
Rule    Brazil  2003    only    -       Feb   16      00:00   0       S
Rule    Brazil  2003    only    -       Oct   19      00:00   1       D
Rule    Brazil  2004    only    -       Feb   15      00:00   0       S
Rule    Brazil  2004    only    -       Nov    2      00:00   1       D
Rule    Brazil  2005    only    -       Feb   20      00:00   0       S
Rule    Brazil  2005    only    -       Oct   16      00:00   1       D
Rule    Brazil  2006    only    -       Feb   19      00:00   0       S



# Zone  NAME                           GMTOFF  RULES/SAVE    FORMAT  [UNTIL]
Zone    Brazil/DeNoronha               -2:00   Brazil        BRE%sT
Zone    posix/Brazil/DeNoronha         -2:00   Brazil        BRE%sT
Zone    right/Brazil/DeNoronha         -2:00   Brazil        BRE%sT

Zone    America/Sao_Paulo              -3:00   Brazil        BR%sT
Zone    America/Rio_de_Janeiro         -3:00   Brazil        BR%sT
Zone    America/Brasilia               -3:00   Brazil        BR%sT
Zone    posix/America/Sao_Paulo        -3:00   Brazil        BR%sT
Zone    posix/America/Rio_de_Janeiro   -3:00   Brazil        BR%sT
Zone    posix/America/Salvador         -3:00   Brazil        BR%sT
Zone    posix/America/Brasilia         -3:00   Brazil        BR%sT
Zone    posix/Brazil/Central           -3:00   Brazil        BR%sT
Zone    posix/Brazil/Brasilia          -3:00   Brazil        BR%sT
Zone    posix/Brazil/Sao_Paulo         -3:00   Brazil        BR%sT
Zone    posix/Brazil/Salvador          -3:00   Brazil        BR%sT
Zone    posix/Brazil/Rio_de_Janeiro    -3:00   Brazil        BR%sT
Zone    right/America/Sao_Paulo        -3:00   Brazil        BR%sT
Zone    right/America/Rio_de_Janeiro   -3:00   Brazil        BR%sT
Zone    right/America/Salvador         -3:00   Brazil        BR%sT
Zone    right/America/Brasilia         -3:00   Brazil        BR%sT
Zone    right/Brazil/Central           -3:00   Brazil        BR%sT
Zone    right/Brazil/Brasilia          -3:00   Brazil        BR%sT
Zone    right/Brazil/Sao_Paulo         -3:00   Brazil        BR%sT
Zone    right/Brazil/Salvador          -3:00   Brazil        BR%sT
Zone    right/Brazil/Rio_de_Janeiro    -3:00   Brazil        BR%sT
Zone    Brazil/Central                 -3:00   Brazil        BR%sT
Zone    Brazil/Brasilia                -3:00   Brazil        BR%sT
Zone    Brazil/Sao_Paulo               -3:00   Brazil        BR%sT
Zone    Brazil/Rio_de_Janeiro          -3:00   Brazil        BR%sT
Zone    Brazil/Salvador                -3:00   Brazil        BR%sT
Zone    Brazil/East                    -3:00   Brazil        BR%sT
Zone    posix/Brazil/East              -3:00   Brazil        BR%sT
Zone    right/Brazil/East              -3:00   Brazil        BR%sT

Zone    Brazil/West                    -4:00   Brazil        BRW%sT
Zone    Brazil/Manaus                  -4:00   Brazil        BRW%sT
Zone    Brazil/Rondonia                -4:00   Brazil        BRW%sT
Zone    Brazil/Roraima                 -4:00   Brazil        BRW%sT
Zone    Brazil/Mato_Grosso             -4:00   Brazil        BRW%sT
Zone    posix/Brazil/Manaus            -4:00   Brazil        BRW%sT
Zone    posix/Brazil/Mato_Grosso       -4:00   Brazil        BRW%sT
Zone    right/Brazil/Manaus            -4:00   Brazil        BRW%sT
Zone    right/Brazil/Mato_Grosso       -4:00   Brazil        BRW%sT
Zone    posix/America/Manaus           -4:00   Brazil        BRW%sT
Zone    right/America/Manaus           -4:00   Brazil        BRW%sT

Zone    Brazil/Acre                    -5:00   Brazil        BRA%sT

				

Rule 块定义了我们更改时区的日期和时间,而在 Zone 块中,我们引用了 Rule 将管理它。请注意,Zone 名称实际上是/usr/share/zoneinfo目录下的文件名,在这里我们为同一时区定义了几个不同的名称,只是为了让人们更容易找到自己的时区。

此文件的注释解释了如何使用 zic zoneinfo 编译器(它也已安装它们)安装这些时区。为了使其生效,您只需将 zoneinfo 文件链接(或复制)到/etc/localtime。在某些发行版中,有一种更高级别(也是首选)的方式来设置时区,在 第 4.1 节中描述。

在使/etc/localtime指向正确的 zoneinfo 文件后,您已经处于该区域规则之下,并且 DST 更改是自动的——您不必手动更改时间。

以下命令序列显示了 Linux 时区机制的动态性。请注意,它们都是在一分钟内发出的

bash$ ls -al /etc/localtime
lrwxrwxrwx  1 root root 35 May 22  2001 /etc/localtime -> /usr/share/zoneinfo/Brazil/Brasilia
bash$ date
Fri Mar 29 20:13:38 BRST 2002
bash# ln -sf /usr/share/zoneinfo/GMT /etc/localtime
bash$ date
Fri Mar 29 23:13:47 GMT 2002
bash# ln -sf /usr/share/zoneinfo/Brazil/Brasilia /etc/localtime
bash$ date
Fri Mar 29 20:14:03 BRST 2002

在 20:13,我在我的默认巴西时区 (BRST),然后我切换到 GMT,我的系统时间更改为 23:13!当您的时区进入 DST 时,您会看到类似的效果,但规则都在您的时区内(/etc/localtime链接不会像此示例那样更改)。

在此计算机上运行的应用程序(例如,生成访问日志的 Web 服务器)将感受到此更改,因此开发人员必须记住完整的时区概念是当前时间加上当前时区,如 第 2 节中所述。

最后,我切换回了正确的时区。


4. Linux Box 的正确设置

对于任何操作系统安装,您都必须知道您的时区。这以城市、州或国家/地区表示。您还必须决定如何设置 BIOS 时间,我们可以在此处遵循两种策略

仅 Linux 机器

在这种情况下,您应该将 BIOS 时间设置为 UTC 时间。DST 更改将由 时区配置动态管理。

双启动 Linux 和 MS Windows 机器

Windows 处理时间的方式比 Linux 更原始。对于 Windows,BIOS 时间始终是您的本地时间,因此 DST 更改更具侵略性,因为它们直接更改硬件时钟。由于 Linux 和 Windows 最初都从硬件获取和设置时间,因此当它们在一起时,Linux 必须以相同的方式处理它。因此,将 BIOS 时间设置为您的本地时间。


4.1. 设置时区

在 Red Hat Linux 和派生系统中,您可以使用 timeconfig 命令设置硬件时钟策略和时区,该命令显示用户友好的对话框。您也可以以非交互方式使用它

示例 2. 时间配置工具

bash# timeconfig "Brasil/East"   # set HC to localtime, and TZ to "Brazil/East"
bash# timeconfig --utc "Brasil/East"   # set HC to UTC, and TZ to "Brazil/East"

无论如何,它会更改/etc/sysconfig/clock文件,该文件在启动时读取。您可以手动编辑它,这就是它的外观

示例 3./etc/sysconfig/clock文件

ZONE="Brazil/East"
UTC=true
ARC=false

4.2. 设置硬件时钟

我鼓励您仅在了解如何获得精确时间后才设置硬件时钟,这在 第 5 节中进行了描述。

hwclock 命令读取和设置硬件时钟,基于您给它的几个选项,这些选项在其手册页中进行了文档化。但是,如果您有现代 Linux 发行版,则不必使用它。在定义您的硬件时钟策略和时区后,您可以使用高级 setclock 命令正确设置您的硬件时钟。您无需传递任何参数,因为 setclock 会智能地调用 hwclock 以根据您的操作系统当前日期和时间设置 BIOS因此,您应始终使用 setclock 命令。

但是,如果您是极简主义者并且喜欢努力工作,那么这里有一些 hwclock 示例

示例 4. setclockhwclock 用法

bash# setclock					# The easy way to set HC
bash# hwclock					# reads HC
bash# hwclock --systohc --utc			# set HC with UTC time based on OS current time
bash# hwclock --systohc				# set HC with local time based on OS current time
bash# hwclock --set --date "21 Oct 2004 21:17"	# set HC with time specified on string

由于操作系统时间独立于硬件时钟,因此我们所做的任何 BIOS 更改都将在下次启动时生效。

更改 HC 的另一种选择是重新启动并访问计算机 BIOS 屏幕。在 IBM e-server zSeries 平台上,您必须在 z/VM 级别执行此操作,因为 Linux 在此处在 z/VM 创建的虚拟机上运行。


5. 精确的全局时间同步

在所有系统中拥有精确的时间与拥有可靠的网络安全策略(不仅仅是简单的防火墙框所能实现的)一样重要。它是基于良好实践的系统管理的主要组成部分之一,从而实现组织和安全性。特别是当管理分布式应用程序、Web 服务,甚至分布式安全监控工具时,精确的时间是必须的。


5.1. NTP:网络时间协议

我们在这里不讨论协议,而是讨论这个奇妙的发明,加上互联网的普及性,如何对我们有用。您可以在 www.ntp.org 上找到更多相关信息。

一旦您的系统正确设置,NTP 将设法保持其时间的准确性,进行非常小的调整以不影响正在运行的应用程序。

人们可以使用基于原子电子频率的硬件来获得精确的时间。还有一种基于 GPS(全球定位系统)的方法。第一个更准确,但第二个也非常好。原子钟需要非常特殊和昂贵的设备,但它们的维护者(通常是大学和研究实验室)将它们连接到运行 NTP 守护程序的计算机,其中一些计算机连接到互联网,最终让我们免费访问它们。这就是我们将同步系统的方式。


5.2. 构建简单的时间同步架构

您将需要

  1. 直接或间接(通过防火墙)连接到互联网。

  2. 选择一些 NTP 服务器。您可以使用公共服务器 pool.ntp.org,或从 NTP 网站上的 stratum 2 公共时间服务器中选择一些。如果您没有互联网访问权限,您的 WAN 管理员(必须是一位聪明的人)可以为您提供一些内部地址。

  3. 在您要同步的所有系统中安装 NTP 包。您可以在您喜欢的 Linux 发行版 CD 中找到 RPM,或者在 rpmfind.net进行搜索

这是一个良好架构的示例

图 1. NTP 的本地中继服务器

如果您有几台机器要同步,请勿让它们都访问您选择的远程 NTP 服务器。只有您的服务器场中的 2 台机器必须访问远程 NTP 服务器,其他机器将与这 2 台机器同步。我们将它们称为中继服务器

您的中继服务器可以是您网络中已有的任何机器。NTP 消耗的内存和 CPU 很少。您不需要为此目的使用专用机器。

Tip

为您的本地中继服务器创建主机名别名(如 ntp1.my.com 和 ntp2.my.com),并且在配置客户端计算机时仅使用这些名称是一个好主意。这样,您可以将 NTP 功能移动到新的中继服务器(具有不同的 IP 和主机名),而无需重新配置客户端。请您的 DNS 管理员创建此类别名。


5.3. NTP 配置

对于您的中继服务器

编辑/etc/ntp.conf并添加您选择的远程服务器

示例 5. 中继机器的/etc/ntp.conf

.
.
server  otherntp.server.org	# A stratum 1 server at server.org
server  ntp.research.gov	# A stratum 2 server at research.gov
.
.

同样,您可以使用公共服务器 pool.ntp.org,或从 NTP 网站获取 公共 stratum 2 时间服务器列表。

对于您的客户端

编辑/etc/ntp.conf并使用标准名称添加您的中继服务器

示例 6. 客户端机器的/etc/ntp.conf

.
.
server  ntp1.my.com		# My first local relay
server  ntp2.my.com		# My second local relay
.
.

如果您的机器的 UTC 时间差与 NTP 服务器相比大于几分钟,则 NTP 将无法工作。因此,您必须进行首次完全同步,我建议您在非生产时间进行。您只需要在进行初始 NTP 设置时执行此操作。永远不要再做

示例 7. 首次同步

bash# ntpdate otherntp.research.gov	(1)
24 Mar 18:16:36 ntpdate[10254]: step time server 200.100.20.10 offset -15.266188 sec
bash# ntpdate otherntp.research.gov	(2)
24 Mar 18:16:43 ntpdate[10255]: adjust time server 200.100.20.10 offset -0.000267 sec
(1)
首次完全同步。我们晚了 15 秒。
(2)
第二次完全同步,只是为了确保。现在我们实际上晚了 0 秒,这很好。

最后一步是启动或重新启动每台机器上的 NTP 守护程序

bash# service ntpd restart
			

5.4. 观看您的 Box 同步

现在您已完成所有设置。NTP 将温和地保持您的机器时间同步。您可以使用 NTP 查询 (ntpq 命令) 观看此过程

示例 8. 时间同步状态

bash# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
-jj.cs.umb.edu   gandalf.sigmaso  3 u   95 1024  377   31.681  -18.549   1.572
 milo.mcs.anl.go ntp0.mcs.anl.go  2 u  818 1024  125   41.993  -15.264   1.392
-mailer1.psc.edu ntp1.usno.navy.  2 u  972 1024  377   38.206   19.589  28.028
-dr-zaius.cs.wis ben.cs.wisc.edu  2 u  502 1024  357   55.098    3.979   0.333
+taylor.cs.wisc. ben.cs.wisc.edu  2 u  454 1024  347   54.127    3.379   0.047
-ntp0.cis.strath harris.cc.strat  3 u  507 1024  377  115.274   -5.025   1.642
*clock.via.net   .GPS.            1 u  426 1024  377  107.424   -3.018   2.534
 ntp1.conectiv.c 0.0.0.0         16 u    - 1024    0    0.000    0.000 4000.00
+bonehed.lcs.mit .GPS.            1 u  984 1024  377   25.126    0.131  30.939
-world.std.com   204.34.198.40    2 u  119 1024  377   24.229   -6.884   0.421

每列的含义

remote

是远程 NTP 服务器的名称。如果您使用-n开关,您将看到这些服务器的 IP 地址而不是它们的主机名。

refid

指示每个服务器当前从哪里获取时间。它可以是服务器主机名或类似 .GPS. 的内容,表示全球定位系统源。

st

Stratum 是一个从 1 到 16 的数字,用于指示远程服务器的精度。1 是最准确的,16 表示“服务器无法访问”。您的 Stratum 将等于准确的远程服务器加 1。永远不要连接到 Stratum 1 服务器,使用 Stratum 2 服务器!Stratum 2 服务器也适用于我们的目的,并且此策略有利于减少 Stratum 1 服务器的流量。

poll

时间请求之间的轮询间隔(以秒为单位)。该值将在允许的最小和最大轮询值之间变化。最初,该值将较小,以便快速发生同步。在时钟“同步”后,轮询值将增加,以减少网络流量和流行时间服务器上的负载。

reach

这是 8 位数组的八进制表示形式,表示本地计算机尝试访问服务器的最后 8 次。如果已访问远程服务器,则设置该位。

delay

接收“现在几点”请求的响应所需的时间(秒)。

offset

最重要的值。本地服务器和远程服务器之间的时间差。在同步过程中,偏移时间会降低,表明本地机器时间越来越准确。

jitter

色散,也称为抖动,是跨多个连续请求/响应对的偏移的统计方差的度量。较低的色散值优于较高的色散值。较低的色散允许更精确的时间同步。

服务器主机名前面的符号的含义

-

表示本地 NTP 服务不太喜欢此服务器

+

* 表示本地 NTP 服务喜欢此服务器

x

标记一个坏主机

*

. 表示当前首选


5.5. 配置为在启动时自动运行 NTP

您可能希望 NTP 始终运行,即使您重新启动计算机也是如此。在每台机器上,执行以下操作

bash# chkconfig --level 2345 ntpd on
			

这将确保自动启动。

如果您的机器在没有重新启动的情况下运行了很长时间(数月、数年),您会发现不准确的硬件时钟和(现在非常准确的)系统时间之间存在很大差异。现代 Linux 发行版在每次系统关闭时都会将操作系统时间复制到 HC,使用类似于 setclock 命令的机制。这样,在下次操作系统启动时,您获得的日期和时间几乎与您关闭机器时一样准确。


6. 使用 chrony 程序进行精确计时

6.1. chronyntp 套件有何不同?

chrony 也使用 NTP 协议,并且也旨在使 Linux 时钟更准确。它也适用于没有互联网连接的系统。那么,精确时间的来源可以是任何精确的时钟,我们可以从中读取时间并将其键入到程序中。此外,它还能够计算硬件时钟的不准确性,并据此在启动时调整硬件时钟。

chrony 1.20 不支持内置硬件时钟,如 GPS 和 DCF 接收器,但程序的结构使这种开发成为可能。


6.2. 如何使用 chrony

chrony 由两部分组成:chronyd 守护程序和用户界面 chronyc

您可以在 chrony.sunsite.dk/index.php 找到 chrony


A. 关于本文档

版权 2002, Avi Alkalay。

本文档必须根据 GNU 自由文档许可证 的条款分发。请使用下面的原始 XML DocBook 源代码翻译、改编、改进、再分发。如果您希望我在此处放置指向您的翻译/改编/改进的链接,请告诉我。

本文档发布在以下位置

翻译时,请随意将所有与巴西相关的配置示例更改为您所在国家的配置示例。并请给我发送一封电子邮件,其中包含翻译者的姓名、电子邮件地址、本文档翻译成的语言、您语言中的短语“[您的语言] 翻译”,所有内容均采用 UTF-8 编码。这样我就可以在原始文档中以您的语言放置指向您的翻译的链接。此外,请让 TLDP 人员了解您的翻译,以便他们可以将其添加到您语言的 HOWTO 集合中。