Ubuntu时间同步

这几天,服务器的状态自动上报脚本遇到了一些问题,细细排查发现是系统时间不准,比标准时间快了半分钟。于是探索了如何进行时间同步。

背景知识

参考:

NTP(NetworkTimeProtocol)是一种用于同步计算机时钟的协议,基于客户端-服务器模型(Client-Server model),通过交换数据包来保持设备时间的一致性。NTP协议的工作原理是与已知的、精准的时间源同步(如GPS、原子钟或通过互联网获得的时间源),从而调整本地时钟。

image.png

NTP协议最早于1985年提出,目前已经发展到了v4版本。它引入了许多新特性和改进,包括更准确的时钟选择算法、更强大的安全性和认证机制、更好的时钟校准算法、更灵活的配置选项等。

NTP协议的具体校时流程如下图所示。考虑到网络传输的延迟问题,NTP同步时并不会直接将服务器提供的时间作为本地时间,而是通过数据包的请求-响应时间推算出网络延迟,并根据服务器返回的时间以及网络延迟的时间校准本地实际。

image.png

在旧版本的Linux系统中,NTP服务由 ntpd 进程管理,其配置文件位于 /etc/ntp.conf 。现代Linux引入了systemd管理系统,集成了许多系统底层的服务进程,因此NTP服务由systemd接管,对应的服务进程名称为 systemd-timesyncd 。可以通过下面的方法确定系统中具体使用的是哪一个服务:

image.png

下面说一说进行时间同步的具体方法

具体方法

首先检查时间同步状态:

1
2
3
4
5
6
7
8
9
10
(base) ~$ date
Wed Nov 5 03:24:03 PM CST 2025
(base) zhangwanyu@lih-workstation:~$ timedatectl
Local time: Wed 2025-11-05 15:24:05 CST
Universal time: Wed 2025-11-05 07:24:05 UTC
RTC time: Wed 2025-11-05 07:23:09
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
NTP service: active
RTC in local TZ: no**

注意到,其中 System clock synchronized: no ,表示未能开启同步。可能的原因包括:①防火墙/UDP 123 端口被阻止(但是经过检查并没有这个问题)②默认NTP服务器无法响应。

这里我们猜测是后一种原因,因此接下来的步骤就是给NTP服务器换源。

step1. 寻找可用的NTP服务器

在一篇技术博客《国内常用NTP时间源同步服务器汇总》中,作者提到了一系列在国内可用的服务器列表,这里我摘取了一些:

服务器地址 备注
ntp1.aliyun.com 阿里云公共 NTP
ntp2.aliyun.com 阿里云公共 NTP
ntp3.aliyun.com 阿里云公共 NTP
ntp1.tencent.com 腾讯云公共 NTP
ntp.ntsc.ac.cn 国家授时中心

可以用 ping 指令测试上述服务器的在线状态:

7296d8e1-6599-4d53-9a81-53a9542fce3f.png

我们保留几个可用的NTP服务器,下一步就是去修改NTP配置文件了。

step2. 修改 NTP配置文件

在Ubuntu系统中,NTP的配置文件存储路径为 /etc/systemd/timesyncd.conf (并非一些博客中提到的 /etc/ntp.conf )。我们将其中的内容修改为:

1
2
3
[Time]
NTP=ntp1.aliyun.com
FallbackNTP=ntp.ntsc.ac.cn

0c95ea0d-27d8-44c2-931f-4d062466d012.png

step3. 重启NTP服务进程

运行下面的指令即可重启

1
sudo systemctl restart systemd-timesyncd

之后,可以使用 sudo timedatectl status 检查同步状态:

84e0106a-ddb3-451b-9d59-89f326736620.png

出现 System clock synchronized: yes 表明修改成功。