网站搜索

如何在 Linux 中设置时间、时区和同步时钟


在本文中,学习如何使用 timedatectl、systemd-timesyncd 和 chrony 设置时间、时区以及将 Linux 系统时钟与 NTP 同步。 :

‘timedatectl‘ 命令是 RHEL 系和 Debian 系发行版的一个实用工具,它是 ‘systemd‘ 系统和服务管理器的一部分,用于替代在基于 ‘sysvinit‘ 守护进程的 Linux 发行版中使用的旧传统 date 命令。

timedatectl 命令允许您查询和更改系统时钟及其设置的配置,您可以使用此命令设置或更改当前日期、时间和时区,或启用与远程 NTP 服务器的自动系统时钟同步。

在本教程中,我将带您了解如何通过使用 timedatectl、systemd-timesyncd 和 chrony 在终端上设置 日期、时间、时区 以及 使用 NTP 同步时间 来管理 Linux 系统的时间。

在 Linux 服务器或系统上保持正确时间始终是一种良好做法,并且它可以带来以下优势:

  • 保持系统任务的及时运行,因为大多数 Linux 任务都是由时间控制的。
  • 用于记录系统事件和其他信息的准确时间。
  • 分布式系统和应用程序的适当同步。
  • 对于像 Kerberos 和 SSL/TLS 证书验证这样的安全协议至关重要。

如何在 Linux 中查找和设置本地时区

1. 要在系统上显示当前的时间和日期,请在命令行中使用 timedatectl 命令,如下所示:

timedatectl  status

检查 Linux 系统时间和日期

在上述输出中,RTC 时间是硬件时钟时间。

2. 您的 Linux 系统上的 时间 始终通过系统设置的 时区 来管理,要查看当前时区,请按如下操作:

timedatectl 
OR
timedatectl | grep Time

检查你的 Linux 系统时区

3. 要查看所有可用的时区,请运行以下命令:

timedatectl list-timezones

列出 Linux 系统上的所有时区

4. 要根据您所在的位置查找本地时区,请运行以下命令。

timedatectl list-timezones |  egrep  -o "Asia/B.*"
timedatectl list-timezones |  egrep  -o "Europe/L.*"
timedatectl list-timezones |  egrep  -o "America/N.*"

在 Linux 中查找您所在的时区

5. 要在 Linux 中设置本地时区,我们将使用如下所示的 set-timezone 选项。

sudo timedatectl set-timezone "Asia/Kolkata"
timedatectl status

在 Linux 系统上设置本地时区

我们总是建议使用并设置协调世界时,UTC。

sudo timedatectl set-timezone UTC
timedatectl status

将系统时间设置为 UTC

您需要输入正确的时区名称,否则在更改时区时可能会出现错误,在以下示例中,时区“Asia/Kolkata”不正确,因此会导致错误。

failed to set time zone: invalid timezone

如何在 Linux 中设置时间和日期

您可以使用 timedatectl 命令在系统上设置日期和时间,方法如下:

在 Linux 中设置时间

6。要仅设置时间,我们可以使用 set-time 开关,并按照 HH:MM:SS(小时、分钟和秒)的格式输入时间。

sudo timedatectl set-time 12:25:30
timedatectl status

当按上述方式设置日期时,您可能会收到以下错误:

Failed to set time: Automatic time synchronization is enabled

该错误发生是因为启用了自动时间同步(NTP),这会阻止手动更改时间。

要修复它,先禁用 NTP,然后设置时间。

sudo timedatectl set-ntp false
sudo timedatectl set-time 12:25:30
timedatectl status

在 Linux 中设置日期和本地时间

7。要同时设置日期和时间,请使用 set-time 开关,并按照 YYYY-MM-DD(年、月、日)的日期格式和 HH:MM:SS(小时、分钟、秒)的时间格式:

sudo timedatectl set-time '2026-01-23 12:25:30'

使用 YY:MM:DD 和 HH:MM:SS 格式配置日期和时间

如何在 Linux 中查找和设置硬件时钟

8. 要将硬件时钟设置为协调世界时(UTC),请使用 set-local-rtc boolean-value 选项,方法如下:

首先查明您的硬件时钟是否设置为本地时区:

timedatectl | grep local

将您的硬件时钟设置为本地时区:

sudo timedatectl set-local-rtc 1

在 Linux 上将硬件时钟设置为 UTC

将你的硬件时钟设置为协调世界时(UTC):

sudo timedatectl set-local-rtc 0

将硬件时钟设置为 UTC

注意:不建议将 RTC 设置为本地时间,这可能会导致夏令时调整出现问题,因此最好将 RTC 保持在 UTC 时间。

将 Linux 系统时钟与远程 NTP 服务器同步

NTP 代表 网络时间协议,是一种互联网协议,用于同步计算机之间的系统时钟。

timedatectl 工具使您能够使用 NTP 自动将 Linux 系统时钟与一组远程服务器同步。

大多数现代 Linux 发行版使用不同的实现方式进行 NTP 同步:

  • systemd-timesyncd:一个轻量级的 SNTP(简单 NTP)客户端,内置于 systemd 中,适合大多数桌面和单服务器环境使用。
  • chrony:一个功能完备的 NTP 实现,可以同时作为客户端和服务器使用。它能更好地处理间歇性的网络连接,并且更准确。

使用 systemd-timesyncd

要开始与远程 NTP 服务器的自动时间同步,请在终端输入以下命令,这将启用并启动 systemd-timesyncd 服务。

sudo timedatectl set-ntp true

要禁用 NTP 时间同步,请在终端输入以下命令。

sudo timedatectl set-ntp false

查看同步状态:

timedatectl status

你应该看到“系统时钟同步:是”和“NTP 服务:活动”。

使用 chrony(推荐用于服务器)

如果你在运行服务器或需要更可靠的时间同步,chrony是更好的选择,它特别适合用于:

  • 不连续运行的系统(笔记本电脑、台式机)。
  • 服务器需要高精度。
  • 网络连接不稳定的系统。
  • 时间一致性至关重要的集群环境。

首先,安装 chrony(如果尚未安装):

sudo apt install chrony   [On Debian-based systems]
sudo dnf install chrony   [On RHEL-based systems]

注意:安装 chrony 会自动禁用 systemd-timesyncd,以防止冲突。

安装后,启用、启动并检查同步状态:

sudo systemctl enable --now chronyd
timedatectl status

检查系统时钟同步状态

要使用您自己的 NTP 服务器而不是默认服务器,您需要编辑 Chrony 配置文件。

sudo nano /etc/chrony/chrony.conf
OR
sudo nano /etc/chrony/sources.d/custom.sources

添加您偏好的 NTP 服务器(您可以从 NTP Pool 项目获取 NTP 服务器列表)。

pool 0.pool.ntp.org iburst
pool 1.pool.ntp.org iburst
pool 2.pool.ntp.org iburst

更改后重新启动 chrony:

sudo systemctl restart chronyd

关于NTP同步的重要注意事项

  • 您无法同时运行多个 NTP 实现,因此请选择 systemd-timesyncd 或 chrony。
  • systemd-timesyncd 是仅限客户端的实现,无法为其他系统提供时间。
  • chrony 可以作为本地网络的时间客户端和时间服务器。
  • 对于生产服务器和关键基础设施,通常推荐使用 chrony 而不是 systemd-timesyncd。
  • NTP 需要打开 UDP 端口 123 以进行出站连接。
摘要

这些是在本教程中描述的非常简单的示例,我希望它们能帮助你设置各种 Linux 系统时钟和时区。

想要了解有关此工具的更多信息,请查看 timedatectl 手册页。

man timedatectl

如果您对这篇文章有任何意见,欢迎留言补充更多信息。