介绍如何在 Ubuntu Linux 中使用 timedatectl
透过网络 NTP 或手动校正系统时间。
timedatectl
时间管理工具
timedatectl
是一个 Ubuntu Linux 默认的系统时间管理工具,支持网络校时与手动校时。直接执行该指令,可以显示目前的设置状态:
# 显示目前状态 timedatectl
Local time: Mon 2020-04-06 18:11:32 CST Universal time: Mon 2020-04-06 10:11:32 UTC RTC time: Mon 2020-04-06 10:11:33 Time zone: Asia/Taipei (CST, +0800) System clock synchronized: yes systemd-timesyncd.service active: yes RTC in local TZ: no
网络校时
timedatectl
的 set-ntp
功能可以设置让系统自动透过网络校时(NTP):
# 激活 NTP 校时 timedatectl set-ntp yes
正常来说,Ubuntu Linux 默认就会打开网络校时功能。
timedatectl
的网络校时功能是透过 systemd-timesyncd
服务来处理的,在激活网络校时之后,该服务就会自动启动,我们可以用以下指令检查 systemd-timesyncd
服务的状态:
# 检查 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 Mon 2020-04-06 18:35:20 CST; 23min ago Docs: man:systemd-timesyncd.service(8) Main PID: 5162 (systemd-timesyn) Status: "Synchronized to time server 91.189.89.198:123 (ntp.ubuntu.com)." Tasks: 2 (limit: 4915) CGroup: /system.slice/systemd-timesyncd.service └─5162 /lib/systemd/systemd-timesyncd
若要关闭自动网络校时,则执行:
# 停用 NTP 校时 timedatectl set-ntp no
手动校时
如果在没有网络的状态下,要以手动输入时间的方式校正系统时间,可以使用 timedatectl
的 set-time
功能来设置日期与时间:
# 手动校时 timedatectl set-time "2020-04-06 18:17:16"
查找时区设置
有时候服务器的时区设置错误,也会造成时间的错乱,最常见的问题提就是刚安装好的服务器没有进行时区的设置,使用默认的 UTC 时区,这时候系统的时间就会跟本地时间差很多。
时区设置可以从 timedatectl
指令的输出中查看,若设置成 UTC 时区的话,Time zone 会显示为 UTC,类似这样:
# 显示目前时区设置 timedatectl
Local time: Thu 2021-10-07 07:06:21 UTC Universal time: Thu 2021-10-07 07:06:21 UTC RTC time: Thu 2021-10-07 07:06:21 Time zone: Etc/UTC (UTC, +0000) System clock synchronized: yes NTP service: active RTC in local TZ: no
系统的时区设置是透过 /etc/localtime
这个文件来设置的,我们也可以透过这个文件来查看时区设置:
# 查看系统时区设置文件 ls -l /etc/localtime
lrwxrwxrwx 1 root root 27 Oct 7 06:17 /etc/localtime -> /usr/share/zoneinfo/Etc/UTC
另外系统的时区信息也会写在 /etc/timezone
这个文件中:
# 查看系统时区设置 cat /etc/timezone
Etc/UTC
更改时区设置
若要更改时区设置,首先要查找系统上可用的时区选项:
# 查找系统时区设置选项 timedatectl list-timezones
由于选项很多,可以搭配 grep
查找自己的城市:
# 查找系统时区设置选项 timedatectl list-timezones | grep Taipei
Asia/Taipei
查到自己的时区信息之后,再以 timedatectl
更改系统的时区设置:
# 更改系统时区设置 sudo timedatectl set-timezone Asia/Taipei
最后再确认一下系统时区信息:
# 显示目前时区设置 timedatectl
Local time: Thu 2021-10-07 15:19:26 CST Universal time: Thu 2021-10-07 07:19:26 UTC RTC time: Thu 2021-10-07 07:19:26 Time zone: Asia/Taipei (CST, +0800) System clock synchronized: yes NTP service: active RTC in local TZ: no