命令行设置系统时间

在Linux上设置系统时间命令,传统上非常简单,就是用一条 date 命令。然而,结合NTP协议部署,以及时区、硬件时钟同步,实际上需要我们注意一些基本的配置。

系统时间显示

首先我们介绍一下最简单的显示系统时钟和调整的方法: date

  • 首先 date 是一个显示系统时间命令:

date

显示输出类似

Wed Jun  2 09:53:43 CST 2021
  • 对于主机,哟一个硬件时钟,可以通过 hwclock 命令显示:

hwclock -r

或者

hwclock --show

显示输出

2021-06-02 09:54:43.287056+08:00

可以显示对应的世界协调时(Coordinated Universal time, UTC):

hwclock --show --utc

显示输出依然是东八区时间

2021-06-02 09:58:14.629137+08:00

hwclock

Linux的系统时间和主机的硬件时间是两套系统,使用 hwclock 可以显示也能调整系统硬件时钟

  • hwclock 命令默认显示硬件时钟,参数 -r--show 相同:

date 命令不同, date 命令显示的是内核维护的时钟

手工设置硬件时钟和系统时钟

  • hwclock 提供了 --set--date 选项来调整硬件时钟

  • date 命令提供了 --set="SRING" 方式设置系统时间:

此外也可以通过格式传递方式来设置日期和时间

同步(copy)系统时钟到硬件时钟

通过NTP协议可以校准Linux内核维护的系统时钟,但是如果没有持续的联网NTP校准维护,系统时钟有可能偏移或者服务器重启后又回退到采用硬件时钟(可能不准确),所以我们需要把NTP校准(或者手工校准)时钟同步到硬件时钟:

hwclock 提供了参数 -w--systohc 都可以实现把系统时钟写入到硬件时钟,矫正硬件时钟:

同步硬件时钟到系统时钟

如果硬件时钟准确,但是系统时钟偏移(这种情况比较少见),可以通过 -s 参数 或者 --hctosys 参数把硬件时钟同步到系统时钟:

timedatectl

现在来介绍 systemd 配套大杀器 timedatectl 工具,这是现代化Linux提供的完整时间调整工具

时间

  • 显示时间

显示输出

  • 调整时间

举例

举例

时区

  • 显示所有支持时区

  • 设置时区

NTP同步

timedatectl 提供了启用ntp同步方法

此时使用 timedatectl 命令可以看到:

注意,默认配置 /etc/systemd/timesyncd.conf 配置需要确保能访问正确时间服务器

如果服务器能够访问internet,则即使没有配置NTP服务器,也可以通过 FailbackNTP 访问internet上公共NTP服务器进行时间同步,过一会再次使用 timedatectl 命令检查可以看到同步

参考

Last updated

Was this helpful?