在现代的计算机系统中,准确的时间同步对于许多关键应用和系统的正常运行至关重要。Linux操作系统提供了多种时间同步工具,其中Chrony是一款备受推崇的工具,为Linux系统提供了更准确、更稳定的时间同步功能。本文将介绍Chrony的工作原理、优点以及如何使用它来提升时间同步的精确性和可靠性。
Chrony 是一个多功能的 NTP (Network Time Protocol) 实现,类 Unix 系统上 NTP 客户端和服务器的替代品。它可以通过 NTP 服务或者类似 GPS 时钟接收器的硬件级参考时钟来同步系统时钟,具有更好的时钟准确度,并且对于那些间歇性互联网连接的系统很有帮助。Chrony 是免费开源的,并且支持 GNU/Linux 和 BSD 衍生版(比如:FreeBSD、NetBSD)、macOS 和 Solaris 等。
Chrony通过使用NTP协议与远程时间服务器进行通信,获取准确的时间信息,并根据网络延迟和时钟偏移进行时间校正。与传统的NTP工具相比,Chrony采用了一种称为渐进线性补偿(PLC)的算法,能够更准确地估算系统时钟的偏移和漂移,从而提供更精确的时间同步。
高准确性:Chrony通过综合考虑网络延迟和时钟偏移等因素,能够提供比传统NTP更高的时间同步准确性。尤其在移动设备或不稳定网络环境下,Chrony的表现更加出色。
快速时间同步:由于采用了先进的算法和优化技术,Chrony能够在短时间内快速将系统时钟调整到正确的时间,减少时间调整的延迟。
稳定性:Chrony能够有效应对网络延迟、时钟漂移和临时网络中断等问题,保持时间同步的稳定性和可靠性。通过自动选择和切换时间服务器,Chrony能够在不同网络环境下灵活适应,并保持时间同步的持续性。
在Linux系统中,可以使用适用于对应发行版的软件包管理工具安装Chrony,并确保启动服务。
apt install chrony
root@knight:/home/knight# chronyc activity
200 OK
0 sources online
0 sources offline
6 sources doing burst (return to online)
0 sources doing burst (return to offline)
1 sources with unknown address
root@knight:/home/knight# chronyc -v
chronyc (chrony) version 4.2 (+READLINE +SECHASH +IPV6 -DEBUG)
打开Chrony的配置文件(通常位于/etc/chrony.conf),根据自己的需求进行配置。可以指定时间服务器、网络限制、时钟调整策略等参数,以满足特定的时间同步要求。
...
#pool ntp.ubuntu.com iburst maxsources 4
#pool 0.ubuntu.pool.ntp.org iburst maxsources 1
#pool 1.ubuntu.pool.ntp.org iburst maxsources 1
#pool 2.ubuntu.pool.ntp.org iburst maxsources 2
...
# Use public NTP servers
server ntp.ntsc.ac.cn iburst
server cn.ntp.org.cn iburst
server time.edu.cn iburst
server time.cloud.tencent.com iburst
server ntp.tencent.com iburst
server ntp.aliyun.com iburst
server ntp.sjtu.edu.cn iburst
# Use local hardware clock as backup if no response from NTP servers
local stratum 10
# Allow NTP client access from local network
#allow 192.168.0.0/16
# Allow NTP clients to synchronize with this server
allow all
# Ignore NTP packets from outside the local network
#deny all
使用相应的命令启动Chrony服务,并将其设置为系统启动时自动运行。可以通过命令行或系统管理工具来进行操作。
systemctl restart chrony
设置为开机启动:systemctl enable chronyd
root@knight:/home/knight# netstat -nulp | grep chronyd
udp 0 0 0.0.0.0:123 0.0.0.0:* 649840/chronyd
udp 0 0 127.0.0.1:323 0.0.0.0:* 649840/chronyd
udp6 0 0 :::123 :::* 649840/chronyd
udp6 0 0 ::1:323 :::* 649840/chronyd
root@knight:/home/knight# chronyc tracking
Reference ID : 11FD74FD (twtpe2-ntp-002.aaplimg.com)
Stratum : 2
Ref time (UTC) : Mon Nov 20 09:42:40 2023
System time : 0.000089889 seconds slow of NTP time
Last offset : -0.000377891 seconds
RMS offset : 0.002584661 seconds
Frequency : 45.411 ppm slow
Residual freq : -2.820 ppm
Skew : 13.079 ppm
Root delay : 0.051119432 seconds
Root dispersion : 0.002186287 seconds
Update interval : 65.2 seconds
Leap status : Normal
root@knight:/home/knight# chronyc activity
200 OK
6 sources online
0 sources offline
0 sources doing burst (return to online)
0 sources doing burst (return to offline)
1 sources with unknown address
root@knight:/home/knight# chronyc sources -v
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- 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
===============================================================================
^? 114.118.7.163 2 6 10 322 +2515us[+2424us] +/- 161ms
^? 1.14.61.51 0 8 0 - +0ns[ +0ns] +/- 0ns
^+ time.neu.edu.cn 1 6 377 3 +5227us[+5227us] +/- 23ms
^+ 106.55.184.199 2 6 377 6 -1792us[-2026us] +/- 37ms
^+ 203.107.6.88 2 6 277 5 +4746us[+4746us] +/- 20ms
^* twtpe2-ntp-002.aaplimg.c> 1 6 377 6 -353us[ -586us] +/- 26ms
root@knight:/home/knight# chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^? 114.118.7.163 2 7 20 324 +2515us[+2424us] +/- 161ms
^? 1.14.61.51 0 8 0 - +0ns[ +0ns] +/- 0ns
^+ time.neu.edu.cn 1 6 377 5 +5227us[+5227us] +/- 23ms
^+ 106.55.184.199 2 6 377 8 -1792us[-2026us] +/- 37ms
^+ 203.107.6.88 2 6 277 7 +4746us[+4746us] +/- 20ms
^* twtpe2-ntp-002.aaplimg.c> 1 6 377 8 -353us[ -586us] +/- 26ms
Chrony是一款强大而灵活的时间同步工具,为Linux系统提供了提升时间同步精确性和稳定性的解决方案。通过使用Chrony,我们能够更好地保证系统的时间准确性,尤其在需要高精度时间同步的应用和环境下表现突出。无论是移动设备还是服务器,Chrony都是一个值得推荐和采用的时间同步工具。