Ubuntu 使用 timesyncd 开启NTP时间同步,并替换为ntpd步进式的逐渐校正时间。
环境为 Ubuntu 22.04 LTS
时区
在 Ubuntu 20.04 及之后的版本中,内置了时间同步功能,并且默认使用systemd
的timesyncd
服务来激活。timesyncd
替代了老旧的 ntpdate
的功能。
检查当前时区
命令:
timedatectl status
命令的输出为
Local time: Mon 2022-12-12 23:35:24 CST
Universal time: Mon 2022-12-12 15:35:24 UTC
RTC time: Mon 2022-12-12 15:35:28
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
NTP service: n/a
RTC in local TZ: no
System clock synchronized: no
反映了没有和远程NTP服务器成功同步, NTP service: n/a
意味着timesyncd
没有启动和运行。RTC in local TZ: no
表示硬件时钟(RTC)设置为协调世界时(UTC),yes表示硬件时钟设置为本地时间.
输出显示NTP服务没有激活,所以启动NTP服务
sudo timedatectl set-ntp on
开启成功后再次查看状态,输出为
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
如果开启时出现错误提示 Failed to set ntp: NTP not supported
,则可以查看软件包systemd-timesyncd
有没有被安装。如果没有则用包管理安装,再安装后尝试再次开启timedatectl。
apt list --installed | grep systemd-timesyncd
sudo apt-get install systemd-timesyncd
设置时区
时区命名约定通常使用“地区/城市”格式
列出所有可用的时区:
timedatectl list-timezones
修改时区:
sudo timedatectl set-timezone Asia/Shanghai
修改NTP时间同步服务器
NTP服务器(Network Time Protocol)是用来使计算机时间同步化的一种协议,NTP服务器确保不同的系统之间时间戳保持同步。
在新安装的ubuntu系统上,基于 systemd 的工具的NTP服务器默认为ntp.ubuntu.com
。查看系统日志,有时会出现时间超时记录:
systemd-timesyncd[354]: Timed out waiting for reply from 91.189.94.4:123 (ntp.ubuntu.com).
要修改时间同步服务器,需要修改配置文件/etc/systemd/timesyncd.conf
sudo vim /etc/systemd/timesyncd.conf
这个文件的默认内容是这样的:
# ...
[Time]
#NTP=
#
#FallbackNTP=ntp.ubuntu.com
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048
把 [Time]
下的注释取消掉。NTP
为主时间同步服务器,FallbackNTP
为备用服务器。
[Time]
NTP=ntp.tencent.com
FallbackNTP=ntp1.tencent.com,ntp2.tencent.com,ntp3.tencent.com
RootDistanceMaxSec=5
PollIntervalMinSec=32
PollIntervalMaxSec=2048
重启服务
service systemd-timesyncd restart
使用 ntpd 渐进式更新时间
timesyncd
(和ntpdate)是断点更新,ntpd 为步进式的逐渐校正时间,不会出现时间跳变。另外有些应用程序可能对时间的任何干扰很敏感。ntpd使用复杂的技术来不断地、逐步地保持系统的时间。
关闭 timesyncd
在安装 ntpd
之前,需要关闭 timesyncd
,以防止这两个服务之间的相互冲突。
sudo timedatectl set-ntp no
使用 timedatectl status
检查输出是否出现了NTP service: inactive
。这意味着timesyncd
已经停止。
安装 ntpd:
使用apt安装ntp
软件包:
sudo apt update
sudo apt install ntp
ntpd
将在你的安装完成后自动开始运行和工作。
ntpd
可能需要几分钟的时间来建立连接。
检查 ntpd 的运行状态:
systemctl status ntp
查看 NTP 服务端口 UDP 123
端口是否被正常监听:
netstat -nupl
查询ntpd
的详细状态信息:
ntpq -p
ntpq
是 ntpd
的一个查询工具。-p 标志要求提供 ntpd
所连接的 NTP 服务器的信息。
如果提示 No association ID's returned
则多半是配置文件有问题。
配置 ntpd
vim /etc/ntp.conf
原始的配置文件如下:
# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help
driftfile /var/lib/ntp/ntp.drift
# Leap seconds definition provided by tzdata
leapfile /usr/share/zoneinfo/leap-seconds.list
# Enable this if you want statistics to be logged.
#statsdir /var/log/ntpstats/
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
# Specify one or more NTP servers.
# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
pool 0.ubuntu.pool.ntp.org iburst
pool 1.ubuntu.pool.ntp.org iburst
pool 2.ubuntu.pool.ntp.org iburst
pool 3.ubuntu.pool.ntp.org iburst
# Use Ubuntu's ntp server as a fallback.
pool ntp.ubuntu.com
# Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html for
# details. The web page <http://support.ntp.org/bin/view/Support/AccessRestrictions>
# might also be helpful.
#
# Note that "restrict" applies to both servers and clients, so a configuration
# that might be intended to block requests from certain clients could also end
# up blocking replies from your own upstream servers.
# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited
# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1
# Needed for adding pool entries
restrict source notrap nomodify noquery
# Clients from this (example!) subnet have unlimited access, but only if
# cryptographically authenticated.
#restrict 192.168.123.0 mask 255.255.255.0 notrust
# If you want to provide time to your local subnet, change the next line.
# (Again, the address is an example only.)
#broadcast 192.168.123.255
# If you want to listen to time broadcasts on your local subnet, de-comment the
# next lines. Please do this only if you trust everybody on the network!
#disable auth
#broadcastclient
修改配置文件之后,需要重新加载 ntpd
Systemctl
是一个systemd
工具,它负责控制systemd
系统和服务管理程序。Systemd
是一个系统管理守护进程,工具和库的集合,功能为用于类Unix系统的中心管理和配置平台。
systemctl reload ntp.service
参考链接:
How To Set Up Time Synchronization on Ubuntu 20.04 - DigitalOcean