如何使用timedatectl从命令行设置时区并启用网络时间同步(NTP)
本文介绍了如何使用timedatectl更改时区,以及如何使用Linux上的NTP(网络时间协议)与远程服务器自动同步系统时钟。
timedatectl是systemd的一部分,可作为命令行实用程序使用,它允许更改系统时钟的各种设置。
如何使用timedatectl在Linux上更改时区
在更改时区之前,请先使用timedatectl查找当前设置的时区(还显示有关系统时间设置的其他信息):
timedatectl
这与相同timedatectl status。
输出示例:
# timedatectl
Local time: Sat 2020-09-12 19:14:59 CST
Universal time: Sat 2020-09-12 11:14:59 UTC
RTC time: Sat 2020-09-12 11:14:59
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
NTP service: inactive
RTC in local TZ: no
现在,让我们列出所有可用的时区,以便您知道将在系统上使用的时区的确切名称(更改时区的命令所需要):
timedatectl list-timezones
时区列表很大。您可以使用grep对其进行过滤,使其仅显示某个洲或某个国家/州的首都的时区,例如仅显示可能的欧洲时区:
timedatectl list-timezones | grep Shanghai
Asia/Shanghai
现在,使用以下命令在Linux****系统上设置时区:
timedatectl set-timezone
timedatectl set-timezone Asia/Shanghai
该命令为您从/usr/share/zoneinfo/到选择的时区创建符号链接/etc/localtime。您也可以手动创建此链接并实现相同的目的。在同一示例中,要将时区设置为Asia/Shanghai,/etc/localtime需要是的符号链接/usr/share/zoneinfo/Asia/Shanghai。
如何使用timedatectl将系统时钟与远程服务器同步(启用NTP)
首先使用timedatectl查找网络时间同步(NTP)服务是否处于活动状态,以及系统时钟是否已同步:
timedatectl
使用以下命令在Linux系统上启用NTP服务:
timedatectl set-ntp true
如果要禁用它,只需使用false代替true。
值得注意的是,如果未安装NTP服务,例如timesyncd,ntpd,Chrony或其他服务,此命令将失败。不过,在许多情况下,timesyncd应该默认安装(例如,默认情况下是在Ubuntu 16.04及更高版本中安装的)。
如果使用chrony或ntpd之类的服务进行更改,systemd-timedated则在重新启动之前,timedatectl不会显示这些内容:
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:
systemctl restart systemd-timesyncd
我还应该补充一点,当使用默认的systemd timesyncd服务时,您可以看到比timedatectl提供的更多信息,例如使用的NTP时间服务器,以及显示上一次执行同步的日志,其中包括:
systemctl status systemd-timesyncd
输出示例:
systemctl status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; disable>
Active: active (running) since Sat 2020-09-12 19:21:43 CST; 4s ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 3518 (systemd-timesyn)
Status: "Initial synchronization to time server 5.79.108.34:123 (0.opensus>
Tasks: 2 (limit: 4915)
Memory: 1.5M
CGroup: /system.slice/systemd-timesyncd.service
└─3518 /usr/lib/systemd/systemd-timesyncd
Sep 12 19:21:42 localhost systemd[1]: Starting Network Time Synchronization...
Sep 12 19:21:43 localhost systemd[1]: Started Network Time Synchronization.
Sep 12 19:21:43 localhost systemd-timesyncd[3518]: Initial synchronization to t
在systemd 239及更高版本上(例如,它在Ubuntu 18.04上不起作用,因为它使用systemd 237),您可以使用以下命令显示systemd-timesyncd状态timedatectl show-timesync:
timedatectl show-timesync
FallbackNTPServers=0.opensuse.pool.ntp.org 1.opensuse.pool.ntp.org 2.opensuse.pool.ntp.org 3.opensuse.pool.ntp.org
ServerName=0.opensuse.pool.ntp.org
ServerAddress=5.79.108.34
RootDistanceMaxUSec=5s
PollIntervalMinUSec=32s
PollIntervalMaxUSec=34min 8s
PollIntervalUSec=1min 4s
NTPMessage={ Leap=0, Version=4, Mode=4, Stratum=2, Precision=-24, RootDelay=17.211ms, RootDispersion=80.734ms, Reference=8285010A, OriginateTimestamp=Sat 2020-09-12 19:22:15 CST, ReceiveTimestamp=Sat 2020-09-12 19:22:15 CST, TransmitTimestamp=Sat 2020-09-12 19:22:15 CST, DestinationTimestamp=Sat 2020-09-12 19:22:16 CST, Ignored=no PacketCount=2, Jitter=3.787ms }
Frequency=-6368726
和属性systemd-timesyncd使用timedatectl timesync-status:
timedatectl timesync-status
Server: 5.79.108.34 (0.opensuse.pool.ntp.org)
Poll interval: 1min 4s (min: 32s; max 34min 8s)
Leap: normal
Version: 4
Stratum: 2
Reference: 8285010A
Precision: 1us (-24)
Root distance: 89.339ms (max: 5s)
Offset: -10.021ms
Delay: 358.105ms
Jitter: 3.787ms
Packet count: 2
Frequency: -97.179ppm
您可以通过编辑/etc/systemd/timesyncd.conf配置文件来更改此处显示的设置。例如,更改NTP服务器(您可以使用NTP Pool Project提供的服务器),取消NTP行注释,并添加要使用的服务器,并以空格分隔。更改配置文件后,重新启动systemd-timesyncd:
systemctl restart systemd-timesyncd