在本指南中,详细介绍了如何使用Chrony在Linux设备上设置和配置NTP。
NTP是网络时间协议的缩写,是通过网络同步两个设备之间时间的标准。
拥有一个准确的时间对于计算来说是至关重要的。它可以确保您的日志正确地打上时间戳,从而更容易找到和诊断在特定时间内发生的问题。它也被用于许多安全方法,如双因素认证,一个令牌只在一定时间内有效。使用NTP被认为是保持系统时间准确的最好方法之一。 它唯一的缺点是,需要保持网络连接。
对于那些可能不具备自身硬件实时时钟的物联网设备来说,它也成为了一个至关重要的工具,可以节省电源和电路板空间。
为了在Linux设备上设置NTP,可以使用一个名为Chrony的软件包。
什么是Chrony?
Chrony是网络时间协议的一个实现,最初是由Richard Curnow编写的。这个实现的目的是为了更现代地取代ntpd。它还具有其他功能,如使用硬件时间戳来同步系统时钟的能力。这有助于提高在局域网(LAN)上同步时间的准确性。
此外,即使在处理断断续续的网络连接或拥挤的网络时,Chrony也能同步时间。这使得Chrony成为比原来的ntp实现更明确的选择。Chrony已经成为各种操作系统的默认NTP实现,包括RHEL 8和SUSE 15。
安装Chrony NTP客户端
在开始之前,需要确保我们已经安装了Chrony NTP守护进程和客户端。幸运的是,Chrony几乎在所有主流发行版上都可以使用,而且安装起来也比较简单。
1. 由于Linux发行版使用不同的软件包管理器,你安装Chrony的方式可能会有细微的差别。
在基于Debian/Ubuntu的操作系统上,如Raspberry Pi OS,你可以使用以下apt命令安装Chrony。
sudo apt install chrony
如果你使用的是CentOS或RHEL,你需要使用yum包管理来安装Chrony。
sudo yum install chrony
最后,如果你运行的是Fedora 22或更新版本,你必须利用dnf将Chrony安装到你的操作系统上。
sudo dnf install chrony
2. 安装了Chrony后,必须使其守护进程服务在启动时自动启动。
同时,还将启动服务,让Chrony立即运行。
守护程序将在后台运行,并通过NTP服务器更新你的Linux设备的时间。
sudo systemctl enable chrony
sudo systemctl start chrony
3. 现在Chrony NTP守护进程已经在Linux设备上启动并运行,让我们检查一下服务状态。
需要做的就是运行以下命令来获取服务的状态。
sudo systemctl status chrony
通过使用状态命令,应该得到类似下面的东西。
$ sudo systemctl status chrony
● chrony.service - chrony, an NTP client/server
Loaded: loaded (/lib/systemd/system/chrony.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-09-08 15:41:17 AEST; 12min ago
Docs: man:chronyd(8)
man:chronyc(1)
man:chrony.conf(5)
Main PID: 6826 (chronyd)
Tasks: 2 (limit: 4915)
Memory: 1.0M
CGroup: /system.slice/chrony.service
├─6826 /usr/sbin/chronyd -F -1
└─6827 /usr/sbin/chronyd -F -1
Sep 08 15:41:17 pimylifeup systemd[1]: Starting chrony, an NTP client/server...
这段文字表示该服务目前处于激活和运行状态,并且已经启用。
4. 还可以使用Chrony的命令行包 “chonyc “来检索活动。
要检索活动,可以运行下面的命令,参考 “chonyc “和它的 “活动 “选项。
chronyc activity
这条Chrony命令将告诉你Linux设备上运行的NTP客户端的状态。
$ chronyc activity
200 OK
4 sources online
0 sources offline
0 sources doing burst (return to online)
0 sources doing burst (return to offline)
0 sources with unknown address
它将显示其当前的状态,并显示其当前连接到多少台服务器以及它们是否在线。
这个命令可以用来确保你没有连接到一个坏的NTP池。
配置NTP源
如果想连接到某个特定的NTP池或服务器,需要配置下NTP源。在本节中,使用nano文本编辑器,但你可以使用任何你觉得舒服的编辑器。
1. 要配置连接的NTP池,需要修改Chrony的配置文件。
配置文件有两个不同的位置。
对于CentOS、RHEL或Fedora,你可以在”/etc/chrony.conf “位置编辑配置文件。
sudo nano /etc/chrony.conf
如果你使用的是基于Ubuntu或Debian的系统,你可以使用nano来编辑位于”/etc/chrony/chrony.conf “的文件。
sudo nano /etc/chrony/chrony.conf
如果你在一个位置找不到配置文件,一定要试试其他位置。
2. 在这个文件中,有两种不同的方法可以找到指定的NTP服务器。
第一个是 “server “指令。这个指令允许你指定你想同步时间的各个NTP服务器。
你也可以用它来指定多个NTP服务器。Chrony软件会自动选择最好的一个。
server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst
server 3.pool.ntp.org iburst
另一种方法是使用 “pool “指令。你对解析到多个地址的域名使用这个指令。
pool 0.pool.ntp.org iburst
如你所见,为Chrony配置NTP服务器是一个相对简单的过程。
3. 一旦你把你的NTP配置添加到文件中,保存它。
如果你使用的是nano,你可以按CTRL + X,然后按Y,再按ENTER键保存文件。
4. 为了使你的更改生效,你需要重新启动Chrony服务。
你可以通过运行以下命令重新启动Chrony。
sudo systemctl restart chrony
5. 你可以使用以下命令检查Chrony是否使用了新的NTP源。
该命令使用Chrony的CLI工具来列出活动源。
chronyc sources
下面是一个例子,说明你将从这个命令中得到的结果。
$ chronyc sources
210 Number of sources = 4
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- dns01.syd01.privatecloud> 2 10 377 824 +2125us[+1813us] +/- 60ms
^- ec2-13-55-50-68.ap-south> 3 10 377 33m +3654us[+3436us] +/- 151ms
^+ ntp3.ds.network 4 9 377 237 -553us[ -553us] +/- 29ms
^* time.cloudflare.com 3 10 377 798 -82us[ -396us] +/- 15ms
使用Chrony检查NTP时间同步
展示如何使用Chrony来检查你的系统是如何使用NTP来同步时间的。使用这些方法,你可以了解很多关于Chrony和NTP服务器之间发生的事情。
检查Chrony的时间跟踪
第一条命令将提供Chrony当前连接的NTP服务器的详细信息,以及它如何影响系统时间。
使用 “跟踪 “参数,我们可以让Chrony显示系统的时间同步细节。
1. 要从Chrony中获取跟踪信息,请在设备上运行以下命令。
chronyc tracking
2. 从这个命令中,你应该得到类似下面显示的东西。
$ chronyc tracking
Reference ID : A29FC801 (time.cloudflare.com)
Stratum : 4
Ref time (UTC) : Tue Sep 08 06:21:18 2020
System time : 0.000133173 seconds fast of NTP time
Last offset : +0.000149029 seconds
RMS offset : 0.000352518 seconds
Frequency : 14.469 ppm fast
Residual freq : +0.000 ppm
Skew : 0.137 ppm
Root delay : 0.027979819 seconds
Root dispersion : 0.001329423 seconds
Update interval : 256.0 seconds
Leap status : Normal
我们将通过这个命令提供的一些信息,你可以理解它告诉你什么。
参考ID:该字段告诉我们Chrony当前同步的NTP服务器的ID和域名(或IP地址)。在这个例子中,你可以看到我们目前正在连接到Cloudflare的时间服务器。请注意,如果这个ID是 “127.127.1.1”,你的设备目前没有与任何外部NTP服务器同步时间。
Stratum: 这个数字向你表明你的服务器距离源时间有多远。在这个例子中,我们的设备被归类为第4层源,因为我们正在连接到第3层源。这个值并不是一个NTP服务器准确度或可靠性的指标,只是它与源时间服务器的距离有多远(第0层)。0层源可以是一些超级精确的东西,比如原子钟。
参考时间(UTC):该字段为我们提供Chrony处理来自源NTP服务器的最后一次测量的UTC时间。
系统时间:该值表示你的系统时间比NTP服务器时间快或慢多少。Chrony不是将系统时钟调整到这个时间,而是通过略微加快或减慢速度来缓慢地重新修正它。Chrony将继续这样做,直到系统时间与NTP服务器的时间一致。软件这样做的目的是为了制止因时间的突然转变而造成时效性软件的错误。
检查Chrony的NTP来源
使用一个简单的命令,也可以显示Chrony使用的NTP源的信息。
运行以下命令,利用 “chronc “命令行工具,后面跟着 “sources”。
chronyc sources
此外,使用”-v “标志。这个标志完全是可选的,用来给每一列添加描述符,这样你就可以了解它们的用途。
通过使用这个命令,你应该得到一个类似于我下面的结果。它将显示你的各种来源和它们的状态。
$ chronyc sources -v
210 Number of sources = 4
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- dns01.syd01.privatecloud> 2 10 377 779 +6038us[+5985us] +/- 70ms
^- ec2-13-55-50-68.ap-south> 3 10 377 367 +4505us[+4447us] +/- 113ms
^+ ntp3.ds.network 4 10 377 677 +725us[ +671us] +/- 30ms
^* time.cloudflare.com 3 10 377 256 +55us[-4399ns] +/- 15ms
该命令列出了关于你的源的数据,如投票率,这个源对你来说是什么,当前是否正在同步等等。
在上面的例子中,你可以看到我们目前正在使用time.cloudflare.com NTP服务器为我们的Linux设备进行时间同步。
在Linux上使用Chrony获取NTP服务器数据
使用的Chrony的最后一个功能是 “sourcestats “命令。该命令列出了Chrony持续调查的一些数据源的统计数据。
chronyc sourcestats -v
和 “sources “命令一样,”-v “标志完全是可选的。不过,它有助于你了解一些列的用途。
下面是使用该命令返回的数据的一个例子。
$ chronyc sourcestats -v
210 Number of sources = 4
.- Number of sample points in measurement set.
/ .- Number of residual runs with same sign.
| / .- Length of measurement set (time).
| | / .- Est. clock freq error (ppm).
| | | / .- Est. error in freq.
| | | | / .- Est. offset.
| | | | | | On the -.
| | | | | | samples. \
| | | | | | |
Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev
==============================================================================
dns01.syd01.privatecloud> 6 3 86m -0.135 1.675 +3292us 979us
ec2-13-55-50-68.ap-south> 14 6 241m -0.040 0.082 +4483us 287us
ntp3.ds.network 13 6 309m +0.080 0.119 +527us 593us
time.cloudflare.com 13 9 224m -0.065 0.103 -316us 354us
使用该命令提供的信息,可以看到提供的采样点数量、测量长度、估计误差率以及更多信息。
这些值可以帮助诊断Linux设备正在从这些NTP服务中检索的数据。
希望到这里,你会明白如何在设备上使用Chrony与NTP服务器同步。Chrony甚至可以与timedatectl命令配合使用,让你轻松配置设备的时间和日期。
如果您在本指南中遇到问题或有任何反馈,请在下方留言。
欢迎转载,请留下出处链接:Labno3 » Linux系统如何同步时间,详细步骤使用Chrony配置NTP