如何使用timedatectl从命令行设置时区并启用网络时间同步(NTP)

本文介绍如何使用timedatectl更改时区,以及如何在Linux上使用NTP(网络时间协议)来使系统时钟与远程服务器自动同步。时间日期 命令行实用程序,可以用作systemd的一部分来更改系统时钟的各种设置。

如何使用timedatectl在Linux上更改时区

更改时区之前,请先使用timedatectl确定当前设置的时区(还显示有关系统时间设置的其他信息)。

timedatectl

这和 timedatectl status
输出示例:

$ timedatectl
                      Local time: Fri 2019-07-19 13:23:38 IST
                  Universal time: Fri 2019-07-19 12:23:38 UTC
                        RTC time: Fri 2019-07-19 12:23:38
                       Time zone: Europe/Dublin (IST, +0100)
       System clock synchronized: no
systemd-timesyncd.service active: yes
                 RTC in local TZ: no

接下来,列出所有可用的时区,以确定系统使用的时区的确切名称(更改时区的命令必需)。

timedatectl list-timezones

时区列表非常大。您可以使用grep进行过滤,以仅显示大陆或国家/州首都的时区。要仅显示可能的欧洲时区:

timedatectl list-timezones | grep Europe

使用以下命令在Linux系统上设置时区:

timedatectl set-timezone 

哪里 是时区列出的 timedatectl list-timezones。例如,Linux系统的时区 America/Lost_Angeles 在:

timedatectl set-timezone America/Los_Angeles

该命令为所选时区创建符号链接 /usr/share/zoneinfo//etc/localtime。您可以手动创建此链接以完成相同的操作。使用相同的示例,更改时区 America/Los_Angeles/etc/localtime 必须是到的符号链接 /usr/share/zoneinfo/America/Los_Angeles

如何使用timedatectl将系统时钟与远程服务器同步(启用NTP)

从timedatectl开始,然后检查网络时间同步(NTP)服务是否处于活动状态以及系统时钟是否已同步。

timedatectl

使用以下命令在Linux系统上启用NTP服务。

timedatectl set-ntp true

如果要禁用它, false 代替 true
请注意,如果未安装NTP服务,此命令将失败。 timesyncd,ntpd,Chrony等。但是,在许多情况下,默认情况下应该安装timesyncd(例如,在Ubuntu 16.04和更高版本上默认安装)。
如果使用chrony或ntpd等服务进行更改,则timedatectl将不会显示这些更改。 systemd-timedated 将重新启动:

sudo systemctl restart systemd-timedated

在Ubuntu 18.04服务器上,必须重新启动 systemd-timesyncd (但是,对于我的Ubuntu 19.04或Solus OS系统,这不是必需的),否则系统时间将不会同步。如果您还使用timesyncd,则timedatectl将 System clock synchronized: 所以 no,即使 NTP service 显示为 active,重启 systemd-timesyncd

sudo systemctl restart systemd-timesyncd

另外,如果您使用默认的systemd timesyncd服务,则应该能够查看比timedatectl提供的更多信息,例如使用的NTP时间服务器和显示上次同步时间的日志。还需要添加。

systemctl status systemd-timesyncd

输出示例:

$ systemctl status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendo
   Active: active (running) since Fri 2019-07-19 13:28:49 IST; 11min ago
     Docs: man:systemd-timesyncd.service(8)
 Main PID: 2232 (systemd-timesyn)
   Status: "Synchronized to time server 91.189.94.4:123 (ntp.ubuntu.com)."
    Tasks: 2 (limit: 3159)
   CGroup: /system.slice/systemd-timesyncd.service
           └─2232 /lib/systemd/systemd-timesyncd

Jul 19 13:28:49 logix22 systemd[1]: Starting Network Time Synchronization...
Jul 19 13:28:49 logix22 systemd[1]: Started Network Time Synchronization.
Jul 19 13:28:48 logix22 systemd-timesyncd[2232]: Synchronized to time server 91.

在systemd 239和更高版本中(例如,由于我使用的是systemd 237,因此在Ubuntu 18.04上不起作用),以查看systemd-timesyncd状态 timedatectl show-timesync

$ timedatectl show-timesync
SystemNTPServers=0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org
FallbackNTPServers=ntp.ubuntu.com
ServerName=0.pool.ntp.org
ServerAddress=194.102.58.173
RootDistanceMaxUSec=5s
PollIntervalMinUSec=32s
PollIntervalMaxUSec=34min 8s
PollIntervalUSec=1min 4s
NTPMessage={ Leap=0, Version=4, Mode=4, Stratum=2, Precision=-23, RootDelay=22.003ms, RootDispersion=21.194ms, Reference=C102015C, OriginateTimestamp=Fri 2019-07-19 13:59:53 IST, ReceiveTimestamp=Fri 2019-07-19 13:59:53 IST, TransmitTimestamp=Fri 2019-07-19 13:59:53 IST, DestinationTimestamp=Fri 2019-07-19 13:59:53 IST, Ignored=no PacketCount=1, Jitter=0 }
Frequency=1647689

还有一个使用systemd-timesyncd的属性 timedatectl timesync-status

$ timedatectl timesync-status
       Server: 194.102.58.173 (0.pool.ntp.org)
Poll interval: 1min 4s (min: 32s; max 34min 8s)
         Leap: normal
      Version: 4
      Stratum: 2
    Reference: C102015C
    Precision: 1us (-23)
Root distance: 32.195ms (max: 5s)
       Offset: +3.652ms
        Delay: 2.903ms
       Jitter: 0
 Packet count: 1
    Frequency: +25.142ppm

要更改此处显示的设置, /etc/systemd/timesyncd.conf 配置文件。举个例子更改NTP服务器(您可以使用提供的服务器 NTP池项目),取消注释NTP行并添加要使用的服务器,并用空格分隔。更改配置文件后重新启动 systemd-timesyncd

sudo systemctl restart systemd-timesyncd
Sidebar