Linux 通过 HTTP 响应头一键校准系统时间

自动尝试多个 HTTPS 站点,读取响应头中的 Date 并设置 Linux 系统时间。

通过网站响应头中的 Date 获取时间,再用 date -s 校准系统时间。适用于安装了 curl、awk、tr 和 GNU date 的 Linux 环境,需要能够正常访问这些 HTTPS 站点,并以 root 身份执行。

一键校时

1
TIME="$(for u in https://www.baidu.com https://www.qq.com https://www.aliyun.com https://www.cloudflare.com; do t="$(curl -fsSI --connect-timeout 5 "$u" 2>/dev/null | awk -F': ' 'tolower($1)=="date"{print $2; exit}' | tr -d '\r')"; [ -n "$t" ] && printf '%s\n' "$t" && break; done)"; [ -n "$TIME" ] && date -s "$TIME"

命令依次尝试百度、腾讯、阿里云和 Cloudflare。每个站点的连接超时为 5 秒,取得非空的 Date 后停止尝试;没有取得时间时不会执行 date -s。

Date 中带有 GMT 时区,GNU date 会据此设置系统时间。显示结果使用系统当前时区,此命令不会修改时区。

查看结果

1
date

这是一次性校时,精度受网站响应时间和网络延迟影响,不会开启持续时间同步服务。macOS 的系统 date 和部分 BusyBox date 参数、解析能力不同,不能直接照搬此命令。

参考:curl 参数说明、GNU date 用法。

使用 Hugo 构建
主题 Stack 由 Jimmy 设计