Linux更新时间

时间在Linux系统里是个非常重要的东西。这里提供几种更新时间的方法,适用于不同的场景。

1. NTP

这个也是最常见的方式。安装ntpdate包后执行

ntpdate -s 

国内中科大、清华、阿里云等都有提供ntp服务器。NTP Pool: https://www.ntppool.org/zh/use.html

debug模式可以判断是否有数据包回复,只有transmit没有receive时会出现no server suitable for synchronization found错误:

# ntpdate -d time.nist.gov
 4 Jan 05:54:00 ntpdate[17682]: ntpdate [email protected] Fri Apr 13 12:52:28 UTC 2018 (1)
Looking for host time.nist.gov and service ntp
host found : time-d-wwv.nist.gov
transmit(132.163.97.4)
transmit(132.163.97.4)
transmit(132.163.97.4)
transmit(132.163.97.4)
transmit(132.163.97.4)
132.163.97.4: Server dropped: no data
server 132.163.97.4, port 123
stratum 0, precision 0, leap 00, trust 000
refid [132.163.97.4], delay 0.00000, dispersion 64.00000
transmitted 4, in filter 4
reference time:    00000000.00000000  Mon, Jan  1 1900  8:05:43.000
originate timestamp: 00000000.00000000  Mon, Jan  1 1900  8:05:43.000
transmit timestamp:  dfd902fe.6ed02ba6  Fri, Jan  4 2019  5:54:06.432
filter delay:  0.00000  0.00000  0.00000  0.00000
         0.00000  0.00000  0.00000  0.00000
filter offset: 0.000000 0.000000 0.000000 0.000000
         0.000000 0.000000 0.000000 0.000000
delay 0.00000, dispersion 64.00000
offset 0.000000

 4 Jan 05:54:08 ntpdate[17682]: no server suitable for synchronization found

这时候需要别的方式同步时间

2. rdate

当运营商屏蔽123端口回传数据时,比如移动、企业、一些云网络内则可以使用tcp方式。rdate已经很老旧了,目前支持的服务器也不多,但可用。

安装rdate后执行

rdate time.nist.gov

3. 根据HTTP头设置时间
还有一种更不济时可以设置时间的方法,利用curl的http request,服务器返回的数据包Date值设置系统时间。这里给出一个脚本:

datetext=$(curl -I 'http://1.1.1.1/' 2>/dev/null | grep "Date:" | sed 's/Date: [A-Z][a-z][a-z], //g'| sed 's/\r//')
echo "Date Retrieved = $datetext"
echo -n "Date set = "
date -s "$datetext"

你也可以把1.1.1.1换成www.baidu.com,网站到你这延迟越低越好。

作者:小老外

我还需要不断地学习。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据