CodeGym /课程 /Docker SELF /管理时区和时间:timedatectl命令

管理时区和时间:timedatectl命令

Docker SELF
第 3 级 , 课程 2
可用

管理时区和时间:命令 timedatectl

1. 在 Linux 中处理时间

为什么正确设置时间很重要?

想象一下,你正在尝试在系统日志中跟踪一个错误,但日志中的时间与实际时间不符。或者更糟糕的是,你所在的国际公司的服务器对不同用户显示了不同的时间。正确设置时间不仅仅是为了方便:它对系统工作、文件同步、维护安全性(比如 SSL 证书依赖时间)以及协调工作任务至关重要。

在 Linux 中,时间可以以两种形式表示:

  1. 系统时间 (System Time) —— 这是操作系统用来完成任务的时间。
  2. 硬件时间 (Hardware Time) —— 存储在硬件层面(BIOS/UEFI)。

我们将使用工具 timedatectl 来处理系统时间。


2. timedatectl 命令基础

timedatectl 是一个命令行工具,提供了一个方便的接口来管理时间。它允许你:

  • 检查当前的时间和时区设置;
  • 设置系统和硬件时间;
  • 配置时区;
  • 启用或禁用通过 NTP (Network Time Protocol) 的时间同步。

检查当前时间

让我们先从最简单的开始。要查看当前时间和设置,请运行以下命令:

timedatectl

输出示例:

Local time: Tue 2023-10-31 12:34:56 MSK
Universal time: Tue 2023-10-31 09:34:56 UTC
RTC time: Tue 2023-10-31 09:34:56
Time zone: Europe/Moscow (MSK, +0300)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

字段解释:

  • Local time: 本地(系统)时间。
  • Universal time: UTC 格式的时间(协调世界时)。
  • RTC time: 硬件时间(基于 BIOS/UEFI)。
  • Time zone: 当前时区。
  • System clock synchronized: 系统时钟是否通过 NTP 同步。
  • NTP service: 时间同步服务是否处于激活状态。
  • RTC in local TZ: 硬件时间是否匹配本地时区。

设置和更改时区

有时候,搬家或项目要求的改变可能需要你更改时区。例如,服务器之前设置在纽约(New York),但现在服务于莫斯科用户。时区可以在目录 /usr/share/zoneinfo 中找到。

要查看可用的时区列表,可以执行以下命令:

timedatectl list-timezones

输出将是以下形式的一个巨大列表:

Africa/Abidjan
America/New_York
Asia/Tokyo
Europe/Moscow

可以使用以下命令设置新的时区:

sudo timedatectl set-timezone Europe/Moscow

检查时区是否已更改:

timedatectl

实践任务

  1. 找出服务器当前的时区。
  2. 将时区切换为 UTC
  3. 将时区切换回你的本地时区。

3. 手动设置时间

虽然现代服务器通常通过 NTP 同步时间,但有时需要手动设置时间。如果服务器位于没有互联网访问的隔离网络,这会很有用。

首先,你可以检查当前的系统时间:

date

可以使用以下命令设置新时间:

sudo timedatectl set-time "YYYY-MM-DD HH:MM:SS"

例如,要将时间设置为 2023 年 11 月 1 日 12:00:

sudo timedatectl set-time "2023-11-01 12:00:00"

现在再次检查结果:

timedatectl

设置硬件时间

硬件时间(也称为 RTC — 实时时钟)是在 BIOS/UEFI 层管理的。如果硬件时间与系统时间不同步,可能会在重启时引发问题。要同步时间,请执行:

sudo hwclock --systohc

此命令将根据系统时间设置硬件时间。

如果需要反向操作(将系统时间与硬件时间同步),请使用:

sudo hwclock --hctosys

4. 使用 NTP 进行时间同步

通过 NTP 进行时间同步是一种自动保持时间最新的方式,它使用远程服务器来进行同步。在大多数现代 Linux 发行版中,NTP 默认是开启的。

检查 NTP 设置

执行以下命令:

timedatectl status

如果 NTP 被关闭 (行 NTP service 会显示 inactive),开启它:

sudo timedatectl set-ntp true

要关闭 NTP,执行以下命令:

sudo timedatectl set-ntp false

如果 NTP 不工作,请确保相关服务是激活状态。例如,在使用 systemd-timesyncd 的系统中,确保服务是启用的:

sudo systemctl status systemd-timesyncd

5. 实践练习

任务

  1. 将系统的时区设置为UTC
  2. 手动将系统时间设置为2023年11月1日,12:00:00。
  3. 启用通过NTP的时间同步。

检查

完成任务后,确保:

  • 你的系统时间符合设置的参数。
  • 时区已更改为UTC。
  • NTP服务已激活。

6. 常见错误和陷阱

  1. "RTC in local TZ: no" 与本地时区不匹配。 很多系统更喜欢用 UTC 作为硬件时间,以避免在不同时区工作时的混乱。这不是一个错误,更像是一个偏好。

  2. 修改时间时访问错误。 timedatectl 命令需要超级用户权限。确保你使用的是 sudo

  3. NTP 同步无法激活。 检查你的服务器上 NTP 服务是否正在运行。例如,对于 systemd-timesyncd,运行以下命令:

    sudo systemctl start systemd-timesyncd
    

为什么在实践中重要?

  1. 服务器管理。 时间和时区的设置对日志的正确处理、数据同步和任务调度非常重要。
  2. 参与国际项目。 使用 UTC 作为标准有助于避免与不同时区客户合作时的混乱。
  3. 面试和认证。 关于 timedatectl 和时间管理的问题往往在系统管理员职位的考试和面试中出现。

现在你可以像管理你的截止时间一样自信、精确地管理 Linux 时间了,没有多余的意外。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION