本文实例操作系统版本:openEuler 22.03 LTS SP2
本章分两部分讲解时间配置:
1、第一节介绍安装操作系统时的网络时间配置及安装后使用chrony配置网络时间服务器;
2、下一节介绍三个基础命令timedatectl、date、hwclock。
chrony 看似简单实则还是很丰富的一套时间管理系统。下面列出chrony涉及的绝大多数命令,但是本篇文章不会全部进行解读。
System clock
tracking
makestep
waitsync
Time sources
sources [-a] [-v] :
sourcestats [-a] [-v]
selectdata [-a] [-v]
selectopts address|refid [+|-option]
reselect
reselectdist distance
NTP sources
activity
authdata [-a]
ntpdata [address]
add peer name [option]…
add pool name [option]…
add server name [option]…
delete address
burst good/max [mask/masked-address]
burst good/max [masked-address/masked-bits]
burst good/max [address]
maxdelay address delay
maxdelaydevratio address ratio
maxdelayratio address ratio
maxpoll address maxpoll
minpoll address minpoll
minstratum address minstratum
offline [address]
offline [masked-address/masked-bits]
offline [mask/masked-address]
online [address]
online [masked-address/masked-bits]
online [mask/masked-address]
onoffline
polltarget address polltarget
refresh
reload sources
sourcename address
Manual time input
manual on
manual off
manual delete index
manual list
manual reset
settime time
NTP access
accheck address
clients [-p packets] [-k] [-r]
serverstats
allow [all] [subnet]
deny [all] [subnet]
local [option]…
local off
smoothing
smoothtime activate
smoothtime reset
Monitoring access
cmdaccheck address
cmdallow [all] [subnet]
cmddeny [all] [subnet]
Real-time clock (RTC)
rtcdata
trimrtc
writertc
Other daemon commands
cyclelogs
dump
rekey
reset sources
shutdown
Client commands
dns option
timeout timeout
retries retries
keygen [id [type [bits]]]
exit
quit
help
在安装系统的时候是可以配置网络自动同步时间的。其实现程序使用的chrony(NTP),配置方法如下:
在安装界面的第二页,选择“时间和日期”:
接着在下面的页面进入服务器的配置:
然后在接下来的页面里填写服务器:
配置完之后点“好”结束配置。之后返回上一页打开“网络时间”的开关:
在安装完系统之后,这个配置会保存在:/etc/chrony.conf 文件中。这是chrony的配置文件。
[root@localhost ~]# cat /etc/chrony.conf
# These servers were defined in the installation:
pool pool.ntp.org iburst
pool 203.107.6.88 iburst
pool 139.199.215.251 iburst
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (https://www.pool.ntp.org/join.html).
# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift
# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3
# Enable kernel synchronization of the real-time clock (RTC).
rtcsync
# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *
# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2
# Allow NTP client access from local network.
#allow 192.168.0.0/16
# Serve time even if not synchronized to a time source.
#local stratum 10
# Require authentication (nts or key option) for all NTP sources.
#authselectmode require
# Specify file containing keys for NTP authentication.
#keyfile /etc/chrony.keys
# Save NTS keys and cookies.
ntsdumpdir /var/lib/chrony
# Insert/delete leap seconds by slewing instead of stepping.
#leapsecmode slew
# Get TAI-UTC offset and leap seconds from the system tz database.
#leapsectz right/UTC
# Specify directory for log files.
logdir /var/log/chrony
# Select which information is logged.
#log measurements statistics tracking
[root@localhost ~]#
chrony是一个NTP服务器的应用,由两个程序组成:chronyd和chronyc。chronyd是守护进程,并且是服务器和客户端一体的程序,一方面对外提供服务,一方面作为客户端自动从网络更新系统的时间;chronyc是命令行程序是用来显示和配置chrony程序的。
[root@localhost ~]# systemctl status chronyd
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-12-12 19:29:09 CST; 3h 2min ago
Docs: man:chronyd(8)
man:chrony.conf(5)
Process: 844 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 873 (chronyd)
Tasks: 1 (limit: 47156)
Memory: 3.9M
CGroup: /system.slice/chronyd.service
└─ 873 /usr/sbin/chronyd
12月 12 19:29:09 localhost systemd[1]: Starting NTP client/server...
12月 12 19:29:09 localhost chronyd[873]: chronyd version 4.1 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +>
12月 12 19:29:09 localhost chronyd[873]: Frequency 4.053 +/- 0.345 ppm read from /var/lib/chrony/drift
12月 12 19:29:09 localhost systemd[1]: Started NTP client/server.
12月 12 19:29:18 localhost.localdomain chronyd[873]: Selected source 203.107.6.88
12月 12 19:31:30 localhost.localdomain chronyd[873]: Source 84.16.67.12 replaced with 185.209.85.222 (pool.ntp.org)
12月 12 20:01:39 localhost.localdomain chronyd[873]: Source 185.209.85.222 replaced with 193.182.111.141 (pool.ntp.org)
[root@localhost ~]#
[root@localhost ~]# systemctl restart chronyd
[root@localhost ~]# systemctl stop chronyd
[root@localhost ~]# systemctl start chronyd
[root@localhost ~]# chronyc -v
chronyc (chrony) version 4.1 (+READLINE +SECHASH +IPV6 +DEBUG)
[root@localhost ~]#
[root@localhost ~]# chronyc tracking
Reference ID : CB6B0658 (203.107.6.88)
Stratum : 3
Ref time (UTC) : Sat Dec 16 03:10:51 2023
System time : 0.000292877 seconds slow of NTP time
Last offset : +0.000137733 seconds
RMS offset : 0.000705308 seconds
Frequency : 2.001 ppm fast
Residual freq : +0.001 ppm
Skew : 1.051 ppm
Root delay : 0.054567307 seconds
Root dispersion : 0.002763330 seconds
Update interval : 258.0 seconds
Leap status : Normal
[root@localhost ~]#
关键字的解释如下:
Reference ID : 这里显示的是同步到服务器引用的ID(IP地址的十六进制表达)和名称(同步服务器IP地址),对于IPV4这里显示IP地址,对于IPV6协议这里显示地址的MD5和的前32位.
Stratum : 这个数值表示距离NTP服务器有多少跳。但是这只是一个参考值,如果在追踪的过程中有超时的跳点则测试会被停止,所以这个值并不准。
Ref time (UTC) : 这是最后一次时间同步事件发生的时间,这是一个UTC时间,如果换算成北京时间需要加8小时。
System time : 这是当前NTP时钟(虚拟时钟)与系统时钟之间的偏移量。通常chronyd会自动纠正这个便宜,但是这个纠正过程是逐渐达成的。如果急于纠正偏移需要使用 makestep 命令来达成,具体用法请向下看。
Last offset : 这是上一次纠正偏移量时纠偏的量。
RMS offset : 这是几次纠偏的平均值
Frequency : 这是指如果 chronyd 不进行校正,系统时钟发生错误的概率。
Residual freq : 我理解这是一个差值的概率表达。
Skew : 我理解这是偏离值的概率表达
Root delay : 网络延迟总和。
Root dispersion : 这个参数我还没理解,大概是和精度有关系。
Update interval : 这是最后两次时钟更新之间的时间间隔。
Leap status : 当前时间工作状态(三个状态:Normal, Insert second, Delete second)
chronyc makestep
这个命令有两种使用方式,一种不使用任何参数的使用方式:
[root@localhost ~]# chronyc makestep
200 OK
[root@localhost ~]#
第二种是带参数的:
chronyc makestep burst stepping-threshold number good/max [mask/masked-address]
chronyc makestep burst stepping-threshold number good/max [masked-address/masked-bits]
chronyc makestep burst stepping-threshold number good/max [address]
burst 是参数的命令关键词,stepping-threshold:步进阈值(以秒为单位);number:时钟更新次数;good/max:是 “从源地址获取的优良度量数量/尝试的最大次数” ; [address] NTP源地址。如下案例:
[root@localhost ~]# chronyc makestep 0.1 1 burst 2/3 203.107.6.88
200 OK
[root@localhost ~]#
以下案例分别使用两个命令参数:
[root@localhost ~]# chronyc sources -a
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- dns1.synet.edu.cn 2 9 377 83 -1593us[-1593us] +/- 22ms
^* dns2.synet.edu.cn 1 10 367 1018 -2563us[-2888us] +/- 20ms
^+ 119.28.206.193 2 10 377 312 +1527us[+1527us] +/- 51ms
^- electrode.felixc.at 2 9 337 1000 +87ms[ +87ms] +/- 204ms
^+ 203.107.6.88 2 10 377 39 -4121us[-4121us] +/- 28ms
^- 139.199.215.251 2 10 363 62 +1560us[+1560us] +/- 64ms
[root@localhost ~]# chronyc sources -v
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- dns1.synet.edu.cn 2 9 377 91 -1593us[-1593us] +/- 22ms
^* dns2.synet.edu.cn 1 10 367 1026 -2563us[-2888us] +/- 20ms
^+ 119.28.206.193 2 10 377 320 +1527us[+1527us] +/- 51ms
^- electrode.felixc.at 2 9 337 1008 +87ms[ +87ms] +/- 204ms
^+ 203.107.6.88 2 10 377 47 -4121us[-4121us] +/- 28ms
^- 139.199.215.251 2 10 363 69 +1560us[+1560us] +/- 64ms
[root@localhost ~]#
用来显示指定NTP源最近一次有效的测量值和其他NTP相关信息。
[root@localhost ~]# chronyc ntpdata 139.199.215.251
Remote address : 139.199.215.251 (8BC7D7FB)
Remote port : 123
Local address : 192.168.5.234 (C0A805EA)
Leap status : Normal
Version : 4
Mode : Server
Stratum : 2
Poll interval : 10 (1024 seconds)
Precision : -23 (0.000000119 seconds)
Root delay : 0.002075 seconds
Root dispersion : 0.039413 seconds
Reference ID : 647A24C4 ()
Reference time : Sun Dec 17 14:08:21 2023
Offset : +0.000972630 seconds
Peer delay : 0.060926426 seconds
Peer dispersion : 0.000000186 seconds
Response time : 0.000021115 seconds
Jitter asymmetry: +0.00
NTP tests : 111 111 1111
Interleaved : No
Authenticated : No
TX timestamping : Kernel
RX timestamping : Kernel
Total TX : 49
Total RX : 45
Total valid RX : 45
[root@localhost ~]#
注意,这个命令只在内存中添加,并不会写入到 chrony.conf 配置文件中。如果需要永久配置,还是需要更改 chrony.conf 。
[root@localhost ~]# chronyc add pool 134.175.254.134 maxsources 4 iburst
200 OK
[root@localhost ~]#
这里请注意,本案例会涉及到下一节才会讲到的命令:timedatectl 。
下面在使用timedatectl 配置时间的时候提示“设置时间失败:开启了自动时间同步功能”。这是因为在安装操作系统的时候开启的自动同步功能。
[root@localhost ~]# timedatectl set-time "2023-12-15"
Failed to set time: Automatic time synchronization is enabled
可以通过 timedatectl 来关闭自动时间同步功能。
[root@localhost ~]# timedatectl set-ntp no
查看配置结果:
[root@localhost ~]# timedatectl
Local time: 六 2023-12-16 20:55:28 CST
Universal time: 六 2023-12-16 12:55:28 UTC
RTC time: 六 2023-12-16 12:55:28
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
显示当前时间
[root@localhost ~]# date
2023年 12月 16日 星期六 20:56:09 CST
手动设置系统时间
[root@localhost ~]# timedatectl set-time "2023-12-15"
显示配置成功的系统时间
[root@localhost ~]# date
2023年 12月 15日 星期五 00:00:03 CST
快速同步时间
[root@localhost ~]# chronyc makestep
506 Cannot talk to daemon
提示出错,因为现在系统自动时间同步没有开启,所以使用 “chronyc makestep” 这个命令会报错。
开启系统自动时间同步:
[root@localhost ~]# timedatectl set-ntp yes
然后再进行快速同步:
[root@localhost ~]# chronyc makestep
200 OK
查看同步后的系统时间:
[root@localhost ~]# date
2023年 12月 16日 星期六 20:57:47 CST
[root@localhost ~]#
chrony 命令是看似简单实则非常强大的,我只是简要介绍一些日常可能会用到的方法。在 chrony 命令集中有全部的命令。