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 架构(如 armv7
和 armv8
)的交叉编译。
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
建议添加定时任务执行同步