739 字
4 分钟
Ntpdate无法同步时间解决方案

Ntpdate无法同步时间解决方案#

现象#

# ntpdate -u ntp.sjtu.edu.cn
Ntpdate: no server suitable for synchronization found

偶然发现有台设备的时间一直无法使用ntpdate同步更新,更换多个时间服务器都不行。

原因#

运营商屏蔽了UDP协议或udp:123端口,而 ntpdate 走的就是 123 端口的 UDP 协议。导致无法同步时间。

解决#

解决办法也很简单,改为使用 TCP 协议的 rdate 来同步时间。

Linux rdate命令用于显示其他主机的日期与时间。

执行rdate指令,向其他主机询问系统时间设置为本机时间。

语法

rdate [-ps] [主机名称或IP地址...]

参数

  • -p 显示远端主机的日期与时间。
  • -s 把从远端主机收到的日期和时间,回存到本地主机的系统时间。
  • -u 传输协议使用UDP协议
  • -l 使用syslog显示错误信息
  • -t <时间> 设置超时时间

Centos系统#

yum install rdate
rdate -ps time.nist.gov

Debian或Ubuntu#

apt install rdate
rdate -ps time.nist.gov

ArmLinux安装rdate#

可惜我这台设备是armLinux,无法执行上面的命令,只能单独编译了…

本次教程使用的是Docker_Ubuntu_22.04容器编译

1. 安装交叉编译工具链#

对于大多数 Linux 系统,你可以通过包管理器来安装 ARM 工具链。

例如,在基于 Debian 或 Ubuntu 的系统上,你可以使用以下命令:

apt update
apt install gcc-arm-linux-gnueabihf
apt install automake autoconf

此命令会安装 gcc 工具链,支持 ARM 架构(如 armv7armv8)的交叉编译。

2. 验证安装#

安装完工具链后,可以通过以下命令检查工具链是否安装成功:

arm-linux-gnueabihf-gcc --version

如果安装成功,你将看到类似下面的信息:

# aarch64-linux-gnu-gcc --version
aarch64-linux-gnu-gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

3. 下载解压rdate源码包#

wget -O /tmp/rdate.tar.gz 'http://lxz.new1cloud.com/service/armLinux/rdate.tar.gz'
tar -zxvf /tmp/rdate.tar.gz -C /usr/local/

4. 编译rdate#

cd /usr/local/rdate
sh -x autogen.sh
./configure --prefix=/opt/rdate
make
make install

#cat autogen.sh
#!/bin/sh
aclocal # 生成 aclocal.m4
autoheader # 生成 config.h.in
automake —add-missing —copy # 生成 Makefile.in
autoconf # 生成 configure 脚本

重新编译清理操作
rm -f config.cache config.log Makefile
make clean
make distclean

5. 确认编译是否成功#

/opt/rdate/bin/rdate -h

如果编译成功,你将看到类似下面的信息:

root@ubuntu:~# /opt/rdate/bin/rdate -h
Usage: rdate [-s] [-p] [-u] [-l] [-d sec] [-t sec] [-a] [-n port] <host> ...

6. 打包放到armLiunx设备上试试是否能成功执行#

cd /opt
tar -czvf rdate_arm64.tar.gz rdate
# scp rdate_arm64.tar.gz username@host:/storage/

这里我已经上传好了,直接用我的链接下载吧

wget -SO /opt/rdate.tar.gz 'http://lxz.new1cloud.com/service/armLinux/rdate_arm64.tar.gz'

解压运行测试

tar -zxvf /opt/rdate.tar.gz -C /opt/
/opt/rdate/bin/rdate -h

如果成功执行,你将看到类似下面的信息:

root@armLinux:~# /opt/rdate/bin/rdate -h
Usage: rdate [-s] [-p] [-u] [-l] [-d sec] [-t sec] [-a] [-n port] <host> ...

同步时间

/opt/rdate/bin/rdate -ps time.nist.gov

如果成功执行,你将看到类似下面的信息:

root@armLinux:~# /opt/rdate/bin/rdate -ps time.nist.gov
rdate: [time.nist.gov]  Sun Apr 20 19:51:37 2025

rdate 时间同步服务器:

time.nist.gov

time-a.nist.gov

time-b.nist.gov

建议添加定时任务执行同步

Ntpdate无法同步时间解决方案
https://imxizhen.asia/posts/linux/ntpdate无法同步时间解决方案/
作者
imxizhen
发布于
2025-04-20
许可协议
CC BY-NC-SA 4.0