如何在 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
在上述输出中,RTC 时间是硬件时钟时间。
2. 您的 Linux 系统上的 时间 始终通过系统设置的 时区 来管理,要查看当前时区,请按如下操作:
timedatectl
OR
timedatectl | grep Time
3. 要查看所有可用的时区,请运行以下命令:
timedatectl list-timezones
4. 要根据您所在的位置查找本地时区,请运行以下命令。
timedatectl list-timezones | egrep -o "Asia/B.*"
timedatectl list-timezones | egrep -o "Europe/L.*"
timedatectl list-timezones | egrep -o "America/N.*"
5. 要在 Linux 中设置本地时区,我们将使用如下所示的 set-timezone 选项。
sudo timedatectl set-timezone "Asia/Kolkata"
timedatectl status
我们总是建议使用并设置协调世界时,UTC。
sudo timedatectl set-timezone UTC
timedatectl status
您需要输入正确的时区名称,否则在更改时区时可能会出现错误,在以下示例中,时区“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
7。要同时设置日期和时间,请使用 set-time 开关,并按照 YYYY-MM-DD(年、月、日)的日期格式和 HH:MM:SS(小时、分钟、秒)的时间格式:
sudo timedatectl set-time '2026-01-23 12:25:30'
如何在 Linux 中查找和设置硬件时钟
8. 要将硬件时钟设置为协调世界时(UTC),请使用 set-local-rtc boolean-value 选项,方法如下:
首先查明您的硬件时钟是否设置为本地时区:
timedatectl | grep local
将您的硬件时钟设置为本地时区:
sudo timedatectl set-local-rtc 1
将你的硬件时钟设置为协调世界时(UTC):
sudo timedatectl set-local-rtc 0
注意:不建议将 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
如果您对这篇文章有任何意见,欢迎留言补充更多信息。










