时间在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,网站到你这延迟越低越好。