Ubuntu 时间同步详解:ntpdate、systemd-timesyncd 与最佳实践

.

目次

1. 为什么在 Ubuntu 上时间同步很重要

1.1 时间是 Linux 服务器的核心系统原语

在 Ubuntu 等 Linux 环境中,时间不仅仅是显示信息,而是系统的基本假设
几乎所有系统进程都基于当前系统时间运行。如果时间不准确,可能会导致比表面上看起来更严重的问题。

Ubuntu 被广泛用于服务器和云工作负载,时间漂移直接影响以下方面:

1.2 时间漂移导致的具体问题

日志完整性被破坏

系统日志和应用日志都带有时间戳。
如果系统时钟不正确:

  • 错误的顺序变得不清晰
  • 故障排查变得困难
  • 多台服务器的日志无法关联

在分布式系统中,这一点尤为关键,即使是轻微的时间不同步也会使故障排查几乎不可能

SSL 证书和安全特性失效

HTTPS 通信中使用的 SSL/TLS 证书严格验证有效期。
如果服务器时间不正确:

  • “证书无效”
  • “证书尚未生效”

错误可能出现,连接可能会被完全拒绝

这不仅影响 Web 服务器,还影响 API 通信以及 apt 等软件包管理工具。

cron 和 systemd 定时器异常

Ubuntu 常用以下方式进行计划任务:

  • cron
  • systemd 定时器

如果系统时间不正确:

  • 预期的任务不会运行
  • 任务会在非预期时间执行

这可能导致 细微但关键的故障,例如错过备份或批处理任务失败。

1.3 为什么在云和 VPS 环境中尤为重要

现代 Ubuntu 部署通常运行在:

  • VPS
  • 云(IaaS)
  • 虚拟机

在这些环境中,时间管理在宿主机和客机操作系统之间是分离的,漂移可能由以下原因引起:

  • 虚拟化开销
  • 挂起/恢复循环
  • 高负载下的时钟延迟

时间在不知不觉中漂移几分钟并不少见。

正因为如此,Ubuntu 设计了 自动且持续的时间同步机制。

1.4 为什么很多人搜索 “ntpdate”

当出现时间漂移时,许多用户会搜索:
“ubuntu time synchronization”
“ubuntu ntpdate”

原因包括:

  • ntpdate 曾是标准工具
  • 大量过时文档仍在流传
  • 看起来可以用一条命令快速解决

然而,现代 Ubuntu 已根本改变了时间同步的方式,不再推荐使用 ntpdate 作为解决方案。

2. 什么是 ntpdate?

2.1 ntpdate 的基本作用

ntpdate 是一个 已废弃的命令行时间同步工具,在 Linux 环境中使用多年。
它向指定的 NTP 服务器查询时间,并 仅同步一次系统时钟

其关键特性包括:

  • 不以守护进程方式运行
  • 执行时立即调整时间
  • 配置极其简单

正因为这种简易性,许多用户在故障期间将其视为快速修复手段。

2.2 ntpdate 的工作原理

ntpdate 的内部行为相当直接:

  1. 向 NTP 服务器查询当前时间
  2. 计算本地系统时间的差值
  3. 立即应用校正

这允许 对秒到分钟级的漂移进行即时纠正

然而,由于它强制调整系统时钟,可能会对正在运行的进程和服务产生负面影响。

2.3 ntpdate 与 ntpd 的区别

ntpdate 常被误认为是 ntpd(NTP 守护进程),但两者的角色截然不同。

  • ntpdate wp:list /wp:list

    • 一次性执行
    • 立即时间调整
    • 不常驻
    • ntpd (NTP daemon) wp:list /wp:list

    • 持续运行

    • 逐步校正时间
    • 为长期稳定性而设计

从运维角度来看,常驻服务更安全,而 ntpdate 一直是辅助工具。

3. 为什么仍然搜索 “ubuntu ntpdate”

3.1 用户搜索是因为已经出现了问题

搜索词 “ubuntu ntpdate” 通常表明 时间同步问题已经发生

常见触发因素包括:

  • 服务器的 SSL 错误
  • cron 任务未运行
  • 日志时间戳不正确
  • 软件包更新失败

在这种情况下,用户自然会寻找快速解决方案。

3.2 过时信息仍然大量存在

由于 ntpdate 使用时间久,仍有大量过时内容:

  • 旧博客文章
  • 问答网站的答案
  • 技术书籍
  • Qiita 与 Stack Overflow 上的帖子

这些来源往往推荐直接运行 ntpdate,却未说明对应的 Ubuntu 版本背景,导致用户盲目执行。

3.3 与官方 Ubuntu 文档的差距

当前的 Ubuntu 文档默认:

  • systemd-timesyncd 已默认启用
  • 时间同步是自动且持续的
  • 通常不需要手动干预

然而,初学者常会想:

  • “systemd 是什么?”
  • “听起来好复杂”
  • “我必须立刻修复”

于是他们倾向于使用 ntpdate,因为它看起来更简单、更快捷。

4. Ubuntu 各版本对 ntpdate 的处理

4.1 Ubuntu 16.04 / 18.04 时代的 ntpdate

在 Ubuntu 16.04 与 18.04 时代,
ntpdate实用且常用的选项

该时期的关键特征包括:

  • 官方仓库中存在 ntpdate 包
  • 常与 ntpd 配合使用
  • 广泛用于首次同步和故障排查

尤其在服务器刚部署完成时:

  • 系统时钟偏差较大
  • ntpd 尚未稳定

此时 ntpdate 被认为极其便利。

4.2 从 Ubuntu 18.04 开始的转变

自 Ubuntu 18.04 起,
systemd 在内部被全面采用

这一架构转变带来了:

  • 时间管理集成到 systemd
  • 假设系统常驻、自动同步
  • 一次性同步工具的角色被削弱

虽然此阶段仍可使用 ntpdate,但已不再被视为必需。

3.3 Ubuntu 20.04 及以后决定性的变化

从 Ubuntu 20.04 开始,情况发生了显著变化。

  • systemd-timesyncd 默认启用
  • ntpdate 默认不再安装
  • 明确标记为已弃用

因此,仍以旧思维运行 ntpdate 会导致:

  • “command not found” 错误
  • 包缺失问题
  • 与 systemd 冲突

关键结论是:
Ubuntu 已彻底将设计理念从“一次性同步”转向“持续同步”。

4.4 Ubuntu 22.04 / 24.04 的现状

在 Ubuntu 22.04 与 24.04 中,这一政策更加明确。

  • 时间同步自动进行
  • 管理员介入最少
  • 大多数情况下无需手动同步

因此官方文档中很少提及 ntpdate。

取而代之的主要工具是:

  • systemd-timesyncd
  • chrony(用于高级场景)

4.5 忽视版本差异导致的困惑

许多问题源于以下情形:

  • 将旧版 Ubuntu 的经验套用到新版本
  • 搜索结果未标明适用的 Ubuntu 版本
  • 对当前安装的 Ubuntu 发行版缺乏了解

这常会引发类似的疑问:

“为什么以前能用的办法现在不行了?”

实际上,这是 Ubuntu 演进的自然结果

4.6 基于版本视角的总结

简而言之:

  • 16.04 / 18.04 → ntpdate 实用
  • 20.04 及以后 → ntpdate 通常不需要
  • 22.04 / 24.04 → 假设持续同步

5. 在现代 Ubuntu 上推荐的时间同步方法

5.1 Ubuntu 的标准设计:自动持续同步

在现代 Ubuntu 系统上,
时间不是管理员手动调整的东西,而是自动维护的

其背后的核心机制是 systemd 集成的时间同步。

  • 开机时自动同步
  • 运行时持续微调
  • 默认启用,无需特殊配置

在大多数环境中,
准确的时间同步已经在工作

5.2 使用 systemd-timesyncd(默认配置)

systemd-timesyncd 是什么?

systemd-timesyncd 是一个
内置于 systemd 的轻量级 NTP 客户端

其特性包括:

  • 常驻服务,自动同步
  • 配置极其简洁
  • 为 Ubuntu 的默认设置优化

除非你有特定需求,
这就是正确的选择

检查时间同步状态

你可以使用以下命令检查当前状态:

timedatectl

重点关注:

  • System clock synchronized(系统时钟已同步)
  • NTP service(NTP 服务)

如果这些已启用,
时间同步已经正常工作

启用 NTP 同步

如果 NTP 被禁用,你可以通过以下方式启用:

sudo timedatectl set-ntp true

这会立即通过 systemd-timesyncd 启动自动同步。

同步时机的注意事项

systemd-timesyncd 设计上避免:

  • 大幅、突兀的时间跳变
  • 频繁、激进的校正

因此,当:

  • 时钟偏差显著
  • 网络刚刚上线

时,你可能需要 等待几分钟 才能完成完整同步。

5.3 何时使用 chrony

chrony 是什么?

chrony 是一个
高精度、高可靠性的时间同步解决方案

它常用于以下环境:

  • 服务器
  • 长时间运行的系统
  • 网络不稳定的情况
  • 虚拟化或容器化环境

与 systemd-timesyncd 的区别

差异可概括如下:

  • systemd-timesyncd wp:list /wp:list

    • 轻量级
    • 简单的配置
    • 通用用途
  • chrony wp:list /wp:list

    • 高精度
    • 细粒度控制
    • 面向服务器的操作

对于桌面和小型服务器,
systemd-timesyncd 通常已足够。

何时适合使用 chrony

如果满足以下条件,可考虑使用 chrony:

  • 时间精度直接影响业务需求
  • 你自行运营 NTP 服务器
  • 虚拟化环境中频繁出现时间漂移

然而,
没有必要仅仅把 chrony 当作 “ntpdate 的替代品”

5.4 为什么推荐常驻服务

现代 Ubuntu 倾向于使用常驻同步,原因显而易见:

  • 避免突兀的时间变化
  • 将服务中断降到最低
  • 减少人为错误

这与一种
以稳定性为首要目标的服务器设计理念
相契合。

6. 如果你仍然想使用 ntpdate

6.1 如何决定是否需要 ntpdate

一般而言,
在正常运行中几乎不需要使用 ntpdate

但在以下情况下可以临时考虑使用:

  • 系统首次部署后立即
  • systemd-timesyncd 未能同步
  • 常驻服务被有意关闭
  • 需要立即校正的测试或短期环境

换句话说,ntpdate 应被视为
一种应急手段,而非永久方案

6.2 典型的临时使用场景

操作系统安装后立即使用

在创建虚拟机或 VPS 后:

  • 时钟可能偏差数分钟甚至更久
  • systemd-timesyncd 可能尚未完成同步

在这种情况下,运行一次 ntpdate,
随后将控制权交还给常驻服务,
是一种合理的做法。

当时钟严重偏差时

时间可能因以下原因变得严重不准确:

  • 电池耗尽
  • 虚拟化平台问题
  • 手动更改时钟

在这种情况下,
常驻 NTP 服务可能无法平稳恢复,且 可以使用一次 ntpdate 来重置时钟

6.3 安装和使用 ntpdate

在 Ubuntu 20.04 及更高版本中,ntpdate 默认未安装。
要使用它,必须显式安装。

sudo apt update
sudo apt install ntpdate

示例用法:

sudo ntpdate pool.ntp.org

这会将系统时间同步到指定的 NTP 服务器。

请记住,此操作是 临时的

6.4 警惕与 systemd 的冲突

使用 ntpdate 时最大的风险是 与常驻服务(如 systemd-timesyncd)冲突

同时运行两者可能导致:

  • 权威时间源不明确
  • 意外的时间变动
  • 对日志和服务产生负面影响

因此,在使用 ntpdate 时:

  • 将使用限制在临时情况
  • 之后恢复常驻同步
  • 切勿持续使用

6.5 为什么不应经常使用 ntpdate

虽然方便,但在现代 Ubuntu 环境中,ntpdate 处于不利地位:

  • 突然的时间调整
  • 不考虑正在运行的服务
  • 与自动管理理念冲突

因此,最初作为偶尔的修复手段,可能会成为不稳定的根源

6.6 正确定位概述

ntpdate 已从以下角色转变:

  • 过去是主要工具
  • 现在是补充工具
  • 通常不再需要

有了此认识,只有在真正需要时才能冷静、恰当地使用它。

7. 常见错误及处理方法

7.1 当出现 ntpdate: command not found

错误含义

此错误表明 系统中不存在 ntpdate 命令
在 Ubuntu 20.04 及更高版本中,这并非异常情况,而是 预期行为

在大多数情况下,出现此情况的原因是:

  • ntpdate 默认未安装
  • 该工具已被弃用并被有意省略

如何考虑解决方案

出现此错误时,首先应思考的问题是:

“我真的需要 ntpdate 吗?”

  • 如果已启用 systemd-timesyncd,则不需要 ntpdate
  • 如果自动同步正常工作,则无需采取任何措施

不要仅因为缺少 ntpdate 就去安装它,优先采用符合现代 Ubuntu 设计的方法才是正确的做法

7.2 当出现 no server suitable for synchronization found

错误含义

此错误表示 与 NTP 服务器的通信失败

可能的原因包括:

  • 没有网络连接
  • DNS 解析失败
  • 防火墙阻止流量
  • 指定的 NTP 服务器未响应

检查要点

出现此错误时,请按顺序检查以下内容:

  • 确认互联网连接可用
  • DNS 解析正常
  • UDP 端口 123 未被阻塞

虽然看似 NTP 问题,但往往实际上是网络配置问题

7.3 当 systemd-timesyncd 未同步时

常见误解

当时间不正确时,人们容易假设“系统出现故障”,但 systemd-timesyncd 并不保证立即同步

  • 系统启动后立即
  • 网络连接后立即
  • 时钟偏差显著时

在这些情况下,同步可能需要一些时间。

如何评估情况

首先,确认是否:

  • 已启用 NTP
  • 服务正在运行
  • 未报告错误状态

在许多情况下,稍作等待即可让同步自然完成

7.4 虚拟环境中特有的时间漂移

为什么虚拟机更容易漂移

在虚拟环境中,时间不稳定是常见的,原因包括:

  • 宿主操作系统的影响
  • CPU 调度的可变性
  • 挂起和恢复周期

这不是 Ubuntu 本身的缺陷,而是 虚拟化平台的特性

基本缓解策略

在虚拟环境中:

  • 启用常驻时间同步
  • 避免重复的一次性校正
  • 确保宿主系统时间准确

此方法可将长期漂移降至最低。

7.5 为什么应避免“直接运行 ntpdate”

当出现错误时,人们往往想直接运行 ntpdate,但这很少能解决根本问题。

  • 根本原因在别处
  • 问题往往会再次出现
  • 这种做法违背系统设计

尤其在故障期间,了解 Ubuntu 设计背后的机制至关重要

7.6 错误处理总结

处理时间同步问题时,请按以下顺序考虑:

  1. 是否已启用自动同步?
  2. 网络是否正常工作?
  3. 方法是否适用于当前的 Ubuntu 版本?
  4. 是否真的需要紧急的变通方案?

牢记此顺序可防止被 ntpdate 误导。

8. 结论:正确看待 Ubuntu 上的时间同步

8.1 ntpdate 曾经是正确的选择,但已不再是主要工具

在早期的 Ubuntu 和 Linux 环境中,ntpdate 是时间同步的标准解决方案。

  • 简单易懂
  • 即时校正
  • 可作为紧急修复手段

因此,它仍深植于搜索结果和用户记忆中。

然而,现代 Ubuntu 系统已 从根本上改变了架构

8.2 现代 Ubuntu 假设自动、持续的同步

自 Ubuntu 20.04 起,基础设计包括:

  • 基于 systemd 的统一管理
  • 常驻 NTP 同步
  • 无需人工干预的维护

这意味着以下操作:

  • 手动修正时间
  • 运行周期性命令

不再被期望

8.3 首先应检查“是否已经同步?”

当出现时间相关问题时,第一步不应是:

  • 搜索 ntpdate
  • 立即执行命令

而应验证:

  • 是否已启用自动同步
  • systemd-timesyncd 是否在运行

在多数情况下,系统已经是正确的或会在短时间内自行纠正

8.4 如果使用 ntpdate,请仅临时使用

仍有一些场景适合使用 ntpdate:

  • 在初始部署后立即使用
  • 时钟严重不准时
  • 测试或临时环境

即便如此,也必须:

  • 避免持续使用
  • 随后恢复自动同步
  • 防止与常驻服务冲突

ntpdate 现在最好被视为 仅用于特殊情况的补充工具

8.5 消除关于 “ubuntu ntpdate” 的混淆

本文最重要的信息可概括为:

如果你需要在 Ubuntu 上搜索 ntpdate,那么情况本身已经是例外

理解这一点可防止:

  • 被过时的文章误导
  • 对错误信息反应过度
  • 进行不必要的配置更改

8.6 正确的选择带来稳定的运行

时间同步看似平凡,却是 系统可靠性的基石

  • 信任自动同步
  • 了解现代 Ubuntu 设计
  • 更新过时的运维知识

这种思维方式可带来稳定可靠的 Ubuntu 系统。

9. 常见问题 (FAQ)

Q1. ntpdate 在 Ubuntu 上已经不能使用了吗?

它并非完全不可用,但在现代 Ubuntu 中 默认未安装且已被标记为弃用

从 Ubuntu 20.04 开始,系统通过 systemd-timesyncd 自动常驻同步已成为标准,正常使用时不再需要 ntpdate

Q2. ntpdate 与 ntpd 有何区别?

它们的角色不同:

  • ntpdate:强制一次性时钟校准
  • ntpd:持续运行并逐步校正时间

在现代 Ubuntu 系统中,systemd-timesyncdchrony 取代了 ntpd。

Q3. 我应该使用 systemd-timesyncd 还是 chrony?

对于大多数环境,systemd-timesyncd 已足够

chrony 更适用于以下情况:

  • 时间精度直接影响业务需求
  • 系统长时间持续运行
  • 虚拟环境中经常出现时间漂移

你不必仅仅因为要替代 ntpdate 而选择 chrony。

Q4. 为什么虚拟机中时间漂移更常见?

虚拟环境更容易出现漂移,原因包括:

  • 主机操作系统的计时行为
  • CPU 调度的变化性
  • 挂起与恢复的循环

因此,启用常驻自动同步是必需的

Q5. 即使已启用 systemd-timesyncd,时间仍不正确

systemd-timesyncd 旨在避免突兀的时钟变动。

因此,在以下情况下同步可能需要一些时间:

  • 系统刚刚启动
  • 网络刚刚连接
  • 时钟偏差较大

在大多数情况下,稍等片刻即可自然解决

Q6. 在哪些情况下使用 ntpdate 是可以接受的?

是的,在有限的场景下可以使用,例如:

  • 操作系统安装后立即
  • 时钟严重不准时
  • 临时测试环境

但应避免持续使用,并在之后恢复自动同步。

Q7. 如有需要,如何禁用时间同步?

在特殊的测试环境中,可以有意禁用 NTP。

但这仅适用于特殊使用场景,不建议在生产系统中使用。

禁用同步会增加以下风险:

  • SSL 错误
  • 日志不一致
  • 定时任务失败

Q8. 初学者应记住什么?

初学者只需记住三点:

  1. Ubuntu 设计为自动时间同步
  2. ntpdate 已不再是主流做法
  3. 首先检查自动同步是否正常

有了这些认识,关于 “ubuntu ntpdate” 的困惑就会少很多。

侍エンジニア塾