定义
ntpdate 是 NTP 软件套件附带的一个系统管理程序,其功能是通过轮询命令行参数中列出的 NTP 服务器来确定正确时间,并据此设置本机的日期与时钟[1]。它的基本调用形式是在命令名后跟一个或多个服务器地址,还可以指定使用 IPv4 或 IPv6、认证密钥、NTP 协议版本、采样数量以及超时时间等参数[2]。除使用 -q 选项只作查询、不改动时钟的情形外,该命令需要在本机以 root 权限执行[3]。
该程序属于一次性执行、执行完即退出的工具,而不是常驻内存的服务进程,这一点与 ntpd 存在根本区别[1]。在传统的 Unix 与 Linux 系统上,它常用于开机阶段先粗略校准时间,随后再启动 NTP 守护进程。
原理
ntpdate 从每台被指定的服务器采集若干时间样本,再套用 NTP 时钟过滤与选择算法的一部分,从中挑出最可靠的一项作为校时依据[2]。所指定的服务器数量越多、单次运行的轮询次数越多、两次运行之间的间隔越规律,其校时的准确度与可靠性就越高[3]。
对时钟的调整分为两种情况。当测得的时间误差超过 0.5 秒时,程序直接调用系统例程 settimeofday() 把时间阶跃修正到正确值;误差小于 0.5 秒时,则调用 adjtime() 让时间平滑地逐步逼近正确值,后一种方式在误差较小时对系统干扰更小、结果也更精确[1]。此外,若不加 -u 选项,而本机已运行着诸如 ntpd 之类的 NTP 服务进程,该命令会拒绝设置日期,以免两个程序同时改动时钟[2]。
NTP 协议本身采用客户端与服务器交换报文的方式工作,报文中记录报文发出和到达的时刻,据此推算网络往返延迟并抵消其影响,NTP 的官方端口号为 123[4]。服务器按距离基准时间源的远近划分为若干层级,即 stratum,层级数值越小表示越接近基准时间源[5]。
发展历程
NTP 由美国特拉华大学的 D. L. Mills 于 1985 年提出,用于估算报文在网络中的往返延迟,并独立估算计算机的时钟偏差[6]。ntpdate 是随该实现一同分发的校时程序之一,早期它与 ntpd 各自保留一份重复的算法代码,用于判断什么是正确时间。随着 ntpd 所用算法不断演进,ntpdate 的代码逐渐显得陈旧;再加上 SNTP 规范的出现,以及 ntpd 改为只要求系统时间大致正确便能启动,在启动守护进程之前先用 ntpdate 校时的必要性逐步下降。
官方文档随后明确说明,ntpdate 的功能已能由 ntpd 借助 -q 命令行选项实现,该程序将从发行版中退出。Debian 等发行版在软件包说明中将其标注为已废弃,建议改用 sntp 完成手工或脚本化的 NTP 查询与同步;ntpsec 项目则把它替换为一个围绕 ntpdig 的 shell 包装脚本[7]。从 Ubuntu 16.04 起,timedatectl 与 systemd 的 timesyncd 逐步取代了原先常用的 ntpdate 与 ntp 工具[8]。到 2024 年,Debian 中名为 ntpdate 的软件包已仅作为过渡包存在,并被请求移除[9]。
应用
ntpdate 的典型用法包括在系统启动脚本中调用,以便在启动 NTP 守护进程之前先把时钟拨到大致准确的位置;或由 cron 定时任务每隔一两小时运行一次,作为不常驻守护进程时的替代方案[1]。在这种周期性运行的方式下,上述频率通常足以让时钟保持在无需阶跃修正的范围内。
排查问题时可以使用 -d 选项,让程序走完所有步骤但不真正修改本机时钟,并打印有助于调试的信息[2]。使用 -q 选项时则只查询服务器时间并报告结果,不设置时钟,该模式不要求 root 权限[3]。这些用法常见于需要临时核对主机时间与标准时间差异的运维场景。
局限
ntpdate 不在运行期间持续调整本机时钟的频率,而 ntpd 会这样做,因此使用该命令所能达到的时间精度是有限的[1]。它也无法替代 NTP 守护进程:守护进程采用更完善的算法,在尽量节省资源的同时兼顾准确度与可靠性,而配合人工编写的 cron 脚本运行的 ntpdate 达不到同样效果。
以阶跃方式修改系统时间会带来时间跳变,这对数据库、邮件存储等依赖时间单调性的系统可能造成影响,因此使用 -b 这类强制阶跃的选项时需要谨慎。当误差较大而又强制以平滑方式调整时,把时钟慢慢拉回正确值可能耗去数小时,这段时间内该主机不适合对外提供时间同步服务[3]。此外,NTP 报文存在被伪造从而使时钟被设置为错误时间的可能,这也限制了单纯依赖单次校时的可靠性[10]。
参见
-
网络时间协议 —— ntpdate 所实现的协议,用于在网络中传递并同步时间。
-
ntpd —— 长期运行的 NTP 守护进程,被普遍视为 ntpdate 的替代方案。
-
chrony —— 较新的时间同步实现,在现代 Linux 发行版中取代 ntpd 与 ntpdate。
-
systemd-timesyncd —— systemd 提供的轻量 NTP 客户端,在多种发行版中替代 ntpdate。
-
sntp —— 简单网络时间协议客户端,官方建议用于手工或脚本化校时。
参考资料
- ntpdate [引用日期2026-10-14]
- ntpdate [引用日期2026-10-14]
- ntpdate [引用日期2026-10-14]
- ntp.org 上的网页 [引用日期2026-10-14]
- インターネット用語1分解説~NTPとは~ [引用日期2026-10-14]
- 國家時間與頻率標準實驗室 [引用日期2026-10-14]
- Feature removals [引用日期2026-10-14]
- github.com 上的网页 [引用日期2026-10-14]
- bugreport [引用日期2026-10-14]
- Network Time Protocol - Common questions [引用日期2026-10-14]