s2.时间同步服务

225 阅读14分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

时间同步服务

加密和安全当前都离不开时间的同步,否则各种网络服务可能不能正常运行

范例: 下图为因为时间错误,证书出错,最终应用出错提示

067.jpg

1.计时方式

1.1 古代计时方式

在远古时期,人类用来确定时间的方式是一些自然界“相对”亘古不变的周期。如:地球的公转是为一年,月球的公转是为一月,地球的自转是为一天等,最早的计时可以追溯到公元前大约2000年,古埃及人利用光线留下的影子用作计时的工具。影子拉得越长,计时越精确。古埃及人修建高耸入云的大型方尖碑,来追踪太阳的移动,随后人们又利用了沙漏、日晷、钟摆等工具,巧妙地利用一些相对固定而准确的周期来计时

商朝人开发并使用了一种泄水型水钟——漏壶。后来又有用蜡烛和线香计时的

北宋元祐元年(1086年),天文学家苏颂将浑仪、浑象和报时装置结合,建造一个划时代的计时工具——“水运仪象台”

14世纪时,西方国家广泛使用机械钟。在十六世纪,奥斯曼帝国的科学家达兹·艾-丁(Taqi al-Din)发明出了机械闹钟

1583年,伽利略提出了著名的等时性理论,即不论摆动幅度的大小,完成一次摆动的时间是相同的。

1656年,荷兰科学家克里斯蒂安·惠更斯(Christiaan Huygens)应用他的理论,设计出了世界第一只钟摆

1868年,百达翡丽(Patek Philippe)发明了手表

6.1.2 现代计时方式

石英晶体受到电池的电力影响时,会产生规律的振动。每秒的振动次数是32768次,可以设计电路来计算振动次数,当计数到32768次时,即计时1秒。1967年,瑞士人发布了世界上首款石英表

当原子从一个相对高的“能量态”迁至低的“能量态”时,会释放出电磁波,产生共振频率。依据此原理,拉比构想出了一种全新的计时仪器——原子钟(Atomic clock)

因为原子的共振频率是固定的。如:铯原子(Caesium133)的固有频率是9192631770赫兹,约合92亿赫兹,对铯原子钟计数9192631770次,即可测量出一秒钟。很多国家(包括我国和美国NIST)的标准局,就是用铯原子钟来作为时间精度标准的。GPS系统也是用铯原子钟来计时

2008年诞生的锶(Strontium87)原子钟,固有频率为429228004229873,约合430万亿赫兹,将精度提高到了10的17次方

2013年镱元素(ytterbium)制成的原子钟问世,镱原子钟的固有频率约合518万亿赫兹,精度高达10的18次方。宇宙的年龄为138亿年。如果这台镱原子钟从宇宙诞生之初就开始计时,直到今天也不会发生1秒的误差

范例:一次性的同步

[root@centos7 ~]# date -s '-1 year'
Wed Nov 18 18:07:42 CST 2020
[root@centos7 ~]# date
Wed Nov 18 18:07:49 CST 2020
[root@centos7 ~]# ping ntp.aliyun.com
PING ntp.aliyun.com (203.107.6.88) 56(84) bytes of data.
64 bytes from 203.107.6.88 (203.107.6.88): icmp_seq=1 ttl=128 time=59.2 ms
64 bytes from 203.107.6.88 (203.107.6.88): icmp_seq=2 ttl=128 time=60.8 ms
^C
--- ntp.aliyun.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 59.260/60.048/60.836/0.788 ms
[root@centos7 ~]# ntpdate ntp.aliyun.com
-bash: ntpdate: command not found
[root@centos7 ~]# yum -y install ntpdate[root@centos7 ~]# ntpdate ntp.aliyun.com
18 Nov 18:13:09 ntpdate[1139]: adjust time server 203.107.6.88 offset 0.132977 sec
[root@centos7 ~]# date
Thu Nov 18 18:13:13 CST 2021
​
[root@centos7 ~]# ntpdate time.windows.com
18 Nov 18:13:36 ntpdate[1141]: adjust time server 20.189.79.72 offset 0.104704 sec
[root@centos7 ~]# date
Thu Nov 18 18:13:38 CST 2021

2.时间同步服务

068.jpg

时间同步服务

多主机协作工作时,各个主机的时间同步很重要,时间不一致会造成很多重要应用的故障,如:加密协议,日志,集群等, 利用NTP(Network Time Protocol) 协议使网络中的各个计算机时间达到同步。目前NTP协议属于运维基础架构中必备的基本服务之一

时间同步软件实现:

  • ntp
  • chrony

ntp:

将系统时钟和世界协调时UTC同步,精度在局域网内可达0.1ms,在互联网上绝大多数的地方精度可以达到1-50ms

项目官网:www.ntp.org

chrony:

实现NTP协议的的自由软件。可使系统时钟与NTP服务器,参考时钟(例如GPS接收器)以及使用手表和键盘的手动输入进行同步。还可以作为NTPv4(RFC 5905)服务器和对等体运行,为网络中的计算机提供时间服务。设计用于在各种条件下良好运行,包括间歇性和高度拥挤的网络连接,温度变化(计算机时钟对温度敏感),以及不能连续运行或在虚拟机上运行的系统。

通过Internet同步的两台机器之间的典型精度在几毫秒之内,在LAN上,精度通常为几十微秒。利用硬件时间戳或硬件参考时钟,可实现亚微秒的精度

3.chrony

3.1 chrony介绍

chrony 的优势:

  • 更快的同步只需要数分钟而非数小时时间,从而最大程度减少了时间和频率误差,对于并非全天24 小时运行的虚拟计算机而言非常有用
  • 能够更好地响应时钟频率的快速变化,对于具备不稳定时钟的虚拟机或导致时钟频率发生变化的节能技术而言非常有用
  • 在初始同步后,它不会停止时钟,以防对需要系统时间保持单调的应用程序造成影响
  • 在应对临时非对称延迟时(例如,在大规模下载造成链接饱和时)提供了更好的稳定性
  • 无需对服务器进行定期轮询,因此具备间歇性网络连接的系统仍然可以快速同步时钟

chrony官网:chrony.tuxfamily.org

chrony官方文档:chrony.tuxfamily.org/documentati…

3.2 chrony 文件组成

包:chrony

两个主要程序:chronyd和chronyc

  • chronyd:后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿
  • chronyc:命令行用户工具,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可在一台不同的远程计算机上工作

服务unit 文件: /usr/lib/systemd/system/chronyd.service

监听端口: 服务端: 123/udp,客户端: 323/udp

配置文件: /etc/chrony.conf

3.3 配置文件chrony.conf

server - 可用于时钟服务器,iburst 选项当服务器可达时,发送一个八个数据包而不是通常的一个数据包。 包间隔通常为2秒,可加快初始同步速度
driftfile - 根据实际时间计算出计算机增减时间的比率,将它记录到一个文件中,会在重启后为系统时钟作出补偿
rtcsync - 启用内核模式,系统时间每11分钟会拷贝到实时时钟(RTC)
allow / deny - 指定一台主机、子网,或者网络以允许或拒绝访问本服务器
cmdallow / cmddeny - 可以指定哪台主机可以通过chronyd使用控制命令
bindcmdaddress - 允许chronyd监听哪个接口来接收由chronyc执行的命令
makestep - 通常chronyd将根据需求通过减慢或加速时钟,使得系统逐步纠正所有时间偏差。在某些特情况下,系统时钟可能会漂移过快,导致该调整过程消耗很长的时间来纠正系统时钟。该指令强制chronyd在调整期大于某个阀值时调整系统时钟
local stratum 10 - 即使server指令中时间服务器不可用,也允许将本地时间作为标准时间授时给其它客户端

范例:

root@ubuntu1804:~# apt -y install chrony
​
root@ubuntu1804:~# dpkg -L chrony
/.
/etc
/etc/NetworkManager
/etc/NetworkManager/dispatcher.d
/etc/NetworkManager/dispatcher.d/20-chrony
/etc/apparmor.d
/etc/apparmor.d/force-complain
/etc/apparmor.d/usr.sbin.chronyd
/etc/chrony
/etc/default
/etc/default/chrony
/etc/dhcp
/etc/dhcp/dhclient-exit-hooks.d
/etc/dhcp/dhclient-exit-hooks.d/chrony
/etc/init.d
/etc/init.d/chrony
/etc/logrotate.d
/etc/logrotate.d/chrony
/etc/network
/etc/network/if-post-down.d
/etc/network/if-post-down.d/chrony
/etc/network/if-up.d
/etc/network/if-up.d/chrony
/etc/ppp
/etc/ppp/ip-down.d
/etc/ppp/ip-down.d/chrony
/etc/ppp/ip-up.d
/etc/ppp/ip-up.d/chrony
/lib
/lib/systemd
/lib/systemd/system
/lib/systemd/system/chrony-dnssrv@.service
/lib/systemd/system/chrony-dnssrv@.timer
/lib/systemd/system/chrony.service
/usr
/usr/bin
/usr/bin/chronyc
/usr/lib
/usr/lib/chrony
/usr/lib/chrony/chrony-helper
/usr/lib/networkd-dispatcher
/usr/lib/networkd-dispatcher/off.d
/usr/lib/networkd-dispatcher/routable.d
/usr/lib/systemd
/usr/lib/systemd/scripts
/usr/lib/systemd/scripts/chronyd-starter.sh
/usr/sbin
/usr/sbin/chronyd
/usr/share
/usr/share/chrony
/usr/share/chrony/chrony.conf
/usr/share/chrony/chrony.keys
/usr/share/doc
/usr/share/doc/chrony
/usr/share/doc/chrony/FAQ.gz
/usr/share/doc/chrony/NEWS.Debian.gz
/usr/share/doc/chrony/README.Debian
/usr/share/doc/chrony/README.container
/usr/share/doc/chrony/README.gz
/usr/share/doc/chrony/changelog.Debian.gz
/usr/share/doc/chrony/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/chrony
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/chronyc.1.gz
/usr/share/man/man5
/usr/share/man/man5/chrony.conf.5.gz
/usr/share/man/man8
/usr/share/man/man8/chronyd.8.gz
/var
/var/lib
/var/lib/chrony
/var/log
/var/log/chrony
/usr/lib/networkd-dispatcher/off.d/chrony
/usr/lib/networkd-dispatcher/routable.d/chrony
​
root@ubuntu1804:~# systemctl restart chrony
​
root@ubuntu1804:~# systemctl restart chrony
root@ubuntu1804:~# ss -ntul
Netid          State            Recv-Q           Send-Q                      Local Address:Port                     Peer Address:Port          
udp            UNCONN           0                0                           127.0.0.53%lo:53                            0.0.0.0:*             
udp            UNCONN           0                0                               127.0.0.1:323                           0.0.0.0:*             
udp            UNCONN           0                0                                   [::1]:323                              [::]:*             
tcp            LISTEN           0                128                         127.0.0.53%lo:53                            0.0.0.0:*             
tcp            LISTEN           0                128                               0.0.0.0:22                            0.0.0.0:*             
tcp            LISTEN           0                128                             127.0.0.1:6010                          0.0.0.0:*             
tcp            LISTEN           0                128                                  [::]:22                               [::]:*             
tcp            LISTEN           0                128                                 [::1]:6010                             [::]:*
​
root@ubuntu1804:~# chronyc sources -nv
210 Number of sources = 8
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^- pugot.canonical.com           2   6    17    35    -80ms[  -80ms] +/-  199ms
^- alphyn.canonical.com          2   6    35    34    -46ms[  -46ms] +/-  239ms
^+ golem.canonical.com           2   6    17    36    -86ms[  -86ms] +/-  195ms
^- chilipepper.canonical.com     2   6    33    34    -87ms[  -87ms] +/-  199ms
^- electrode.felixc.at           3   6    17    38  -4632us[-4632us] +/-  121ms
^- ntp.wdc1.us.leaseweb.net      2   6    17    37  -9284us[-9284us] +/-  261ms
^- ntp1.ams1.nl.leaseweb.net     2   6    17    36    +30ms[  +30ms] +/-  189ms
^* 139.199.214.202               2   6    17    39   +900us[+4240us] +/-   30ms #* 星号表示和这台服务器已经同步
​
root@ubuntu1804:~# date
Thu Nov 18 18:18:30 CST 2021
root@ubuntu1804:~# date 102009302022.30
Thu Oct 20 09:30:30 CST 2022
root@ubuntu1804:~# date
Thu Oct 20 09:30:31 CST 2022
root@ubuntu1804:~# systemctl restart chrony
root@ubuntu1804:~# date
Thu Oct 20 09:31:28 CST 2022
root@ubuntu1804:~# date
Thu Nov 18 18:20:02 CST 2021
​
[root@centos7 ~]# yum -y install chrony
​
[root@centos7 ~]# vim /etc/chrony.conf
server 172.31.2.18 iburst
​
[root@centos7 ~]# systemctl restart chronyd
[root@centos7 ~]# chronyc sources -nv
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^? 172.31.2.18                   0   6     0     -     +0ns[   +0ns] +/-    0ns
#现在没有同步
​
root@ubuntu1804:~# vim /etc/chrony/chrony.conf
allow 172.31.0.0/21                                
local stratum 10
​
root@ubuntu1804:~# systemctl restart chrony
root@ubuntu1804:~# systemctl restart chronyd
​
[root@centos7 ~]# systemctl restart chronyd
​
[root@centos7 ~]# chronyc sources -nv
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 172.31.2.18                   3   6     7     0   -119us[+2104us] +/-  142ms
​
​
[root@centos7 ~]# ss -ntul
Netid State      Recv-Q Send-Q                        Local Address:Port                                       Peer Address:Port              
udp   UNCONN     0      0                                 127.0.0.1:323                                                   *:*                  
udp   UNCONN     0      0                                     [::1]:323                                                [::]:*                  
tcp   LISTEN     0      128                                       *:22                                                    *:*                  
tcp   LISTEN     0      100                               127.0.0.1:25                                                    *:*                  
tcp   LISTEN     0      128                                    [::]:22                                                 [::]:*                  
tcp   LISTEN     0      100                                   [::1]:25                                                 [::]:*
​
[root@centos7 ~]# ntpdate 172.31.2.18
18 Nov 18:27:42 ntpdate[1267]: adjust time server 172.31.2.18 offset 0.003363 sec

3.4 NTP 客户端命令

chronyc 可以运行在交互式和非交互式两种方式,支持以下子命令

help 命令可以查看更多chronyc的交互命令
accheck 检查是否对特定主机可访问当前服务器
activity 显示有多少NTP源在线/离线
sources [-v] 显示当前时间源的同步信息
sourcestats [-v]显示当前时间源的同步统计信息
add server 手动添加一台新的NTP服务器
clients 报告已访问本服务器的客户端列表
delete 手动移除NTP服务器或对等服务器
settime 手动设置守护进程时间
tracking 显示系统时间信息

范例: CentOS6 ntp客户端同步检查

[root@centos6 ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*10.0.0.8 202.112.29.82 3 u 16 64 1 0.424 1.956 1.771

3.5 公共 NTP 服务

  • pool.ntp.org:项目是一个提供可靠易用的NTP服务的虚拟集群cn.pool.ntp.org,0-3.cn.pool.ntp.org

  • 阿里云公共NTP服务器

    Unix/linux类:ntp.aliyun.com,ntp1-7.aliyun.com

    windows类: time.pool.aliyun.com

  • 腾讯公共NTP

    time1-5.cloud.tencent.com

  • 大学ntp服务

    s1a.time.edu.cn 北京邮电大学

    ntp.tuna.tsinghua.edu.cn 清华大学

    s1c.time.edu.cn 北京大学

  • 国家授时中心服务器:210.72.145.44

  • 微软: time.windows.com

3.6 时间工具

  • timedatectl 时间和时区管理
#查看日期时间、时区及NTP状态:
timedatectl
​
#查看时区列表:
timedatectl list-timezones
​
#修改时区:
timedatectl set-timezone Asia/Shanghai
​
#修改日期时间:
timedatectl set-time "2017-01-23 10:30:00"#开启NTP:
timedatectl set-ntp true/false
  • ntpdate 时间同步命令
  • system-config-date:图形化配置chrony服务的工具

3.7 实战案例: 实现私有的时间服务器

#服务器端配置
[root@rocky8 ~]# hostname -I
172.31.1.8
​
[root@rocky8 ~]# yum -y install chrony[root@rocky8 ~]# vim /etc/chrony.conf
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
​
#allow 192.168.0.0/16
allow 0.0.0.0/0 #加此行,指定允许同步的网段# Serve time even if not synchronized to a time source.
local stratum 10 #删除此行注释,当互联网无法连接,仍然可以为客户端提供时间同步服务[root@rocky8 ~]# systemctl restart chronyd
​
​
#服务启动后会打开端口123/udp
[root@rocky8 ~]# ss -ntul
Netid         State          Recv-Q         Send-Q                 Local Address:Port                 Peer Address:Port        Process         
udp           UNCONN         0              0                            0.0.0.0:123                       0.0.0.0:*                           
udp           UNCONN         0              0                          127.0.0.1:323                       0.0.0.0:*                           
udp           UNCONN         0              0                              [::1]:323                          [::]:*                           
tcp           LISTEN         0              128                          0.0.0.0:22                        0.0.0.0:*                           
tcp           LISTEN         0              128                             [::]:22                           [::]:*
​
#客户端配置
[root@centos7 ~]# yum -y install chrony
[root@centos7 ~]# vim /etc/chrony.conf
server 172.31.1.8 iburst
​
[root@centos7 ~]# systemctl restart chronyd#确认同步成功
[root@centos7 ~]# chronyc sources -nv
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 172.31.1.8                    3   6    17    24  -4584ns[-1520us] +/-   50ms

3.8 一键安装chrony服务端和客户端

[root@rocky8 ~]# cat install_chrony_server.sh 
#!/bin/bash
#
#**********************************************************************************************
#Author:        Raymond
#QQ:            88563128
#Date:          2021-11-22
#FileName:      install_chrony_server.sh
#URL:           raymond.blog.csdn.net
#Description:   install_chrony_server for CentOS 7/8 & Ubuntu 18.04/20.04 & Rocky 8
#Copyright (C): 2021 All rights reserved
#*********************************************************************************************
COLOR="echo -e \033[01;31m"
END='\033[0m'os(){
    OS_ID=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
}
​
install_chrony(){
    if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
        yum -y install chrony &> /dev/null
        sed -i -e '/^pool.*/d' -e '/^server.*/d' -e '/^# Please consider .*/a\server ntp.aliyun.com iburst\nserver time1.cloud.tencent.com iburst\nserver ntp.tuna.tsinghua.edu.cn iburst' -e 's@^#allow.*@allow 0.0.0.0/0@' -e 's@^#local.*@local stratum 10@' /etc/chrony.conf
        systemctl enable --now chronyd &> /dev/null
        systemctl is-active chronyd &> /dev/null ||  { ${COLOR}"chrony 启动失败,退出!"${END} ; exit; }
        ${COLOR}"chrony安装完成"${END}
    else
        apt -y install chrony &> /dev/null
        sed -i -e '/^pool.*/d' -e '/^# See http:.*/a\server ntp.aliyun.com iburst\nserver time1.cloud.tencent.com iburst\nserver ntp.tuna.tsinghua.edu.cn iburst' /etc/chrony/chrony.conf
        echo "allow 0.0.0.0/0" >> /etc/chrony/chrony.conf
        echo "local stratum 10" >> /etc/chrony/chrony.conf
        systemctl enable --now chronyd &> /dev/null
        systemctl is-active chronyd &> /dev/null ||  { ${COLOR}"chrony 启动失败,退出!"${END} ; exit; }
        ${COLOR}"chrony安装完成"${END}
    fi
}
​
main(){
    os
    install_chrony
}
​
main
​
[root@rocky8 ~]# bash install_chrony_server.sh 
chrony安装完成
​
[root@rocky8 ~]# systemctl status chronyd
● chronyd.service - NTP client/server
   Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-11-22 19:02:47 CST; 9min ago
     Docs: man:chronyd(8)
           man:chrony.conf(5)
  Process: 9566 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS)
  Process: 9559 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 9561 (chronyd)
    Tasks: 1 (limit: 4783)
   Memory: 920.0K
   CGroup: /system.slice/chronyd.service
           └─9561 /usr/sbin/chronyd
​
Nov 22 19:02:47 rocky8 systemd[1]: Starting NTP client/server...
Nov 22 19:02:47 rocky8 chronyd[9561]: chronyd version 4.1 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SEC>
Nov 22 19:02:47 rocky8 chronyd[9561]: Using right/UTC timezone to obtain leap second data
Nov 22 19:02:47 rocky8 systemd[1]: Started NTP client/server.
Nov 22 19:02:52 rocky8 chronyd[9561]: Selected source 139.199.215.251 (time1.cloud.tencent.com)
Nov 22 19:02:52 rocky8 chronyd[9561]: System clock TAI offset set to 37 seconds
Nov 22 19:02:54 rocky8 chronyd[9561]: Selected source 203.107.6.88 (ntp.aliyun.com)
[root@rocky8 ~]# chronyc sources -nv
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^+ 203.107.6.88                  2   6    17    64    -10ms[  -13ms] +/-   42ms
^* 139.199.215.251               2   6    71    60  +8077us[+5190us] +/-   50ms
^? 101.6.6.172                   0   7     0     -     +0ns[   +0ns] +/-    0ns
​
root@ubuntu1804:~# cat install_chrony_client.sh 
#!/bin/bash
#
#**********************************************************************************************
#Author:        Raymond
#QQ:            88563128
#Date:          2021-11-22
#FileName:      install_chrony_client.sh
#URL:           raymond.blog.csdn.net
#Description:   install_chrony_client for CentOS 7/8 & Ubuntu 18.04/20.04 & Rocky 8
#Copyright (C): 2021 All rights reserved
#*********************************************************************************************
COLOR="echo -e \033[01;31m"
END='\033[0m'
SERVER=172.31.1.8
​
os(){
    OS_ID=`sed -rn '/^NAME=/s@.*="([[:alpha:]]+).*"$@\1@p' /etc/os-release`
}
​
install_chrony(){
    if [ ${OS_ID} == "CentOS" -o ${OS_ID} == "Rocky" ] &> /dev/null;then
        yum -y install chrony &> /dev/null
        sed -i -e '/^pool.*/d' -e '/^server.*/d' -e '/^# Please consider .*/a\server '${SERVER}' iburst' /etc/chrony.conf
        systemctl enable --now chronyd &> /dev/null
        systemctl is-active chronyd &> /dev/null ||  { ${COLOR}"chrony 启动失败,退出!"${END} ; exit; }
        ${COLOR}"chrony安装完成"${END}
    else
        apt -y install chrony &> /dev/null
        sed -i -e '/^pool.*/d' -e '/^# See http:.*/a\server '${SERVER}' iburst' /etc/chrony/chrony.conf
        systemctl enable --now chronyd &> /dev/null
        systemctl is-active chronyd &> /dev/null ||  { ${COLOR}"chrony 启动失败,退出!"${END} ; exit; }
        systemctl restart chronyd
        ${COLOR}"chrony安装完成"${END}
    fi
}
​
main(){
    os
    install_chrony
}
​
main
​
root@ubuntu1804:~# bash install_chrony_client.sh 
chrony安装完成
​
root@ubuntu1804:~# systemctl status chronyd
● chrony.service - chrony, an NTP client/server
   Loaded: loaded (/lib/systemd/system/chrony.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-11-22 19:10:51 CST; 3min 26s ago
     Docs: man:chronyd(8)
           man:chronyc(1)
           man:chrony.conf(5)
  Process: 3097 ExecStartPost=/usr/lib/chrony/chrony-helper update-daemon (code=exited, status=0/SUCCESS)
  Process: 3090 ExecStart=/usr/lib/systemd/scripts/chronyd-starter.sh $DAEMON_OPTS (code=exited, status=0/SUCCESS)
 Main PID: 3096 (chronyd)
    Tasks: 1 (limit: 2287)
   CGroup: /system.slice/chrony.service
           └─3096 /usr/sbin/chronyd
​
Nov 22 19:10:51 ubuntu1804 systemd[1]: Starting chrony, an NTP client/server...
Nov 22 19:10:51 ubuntu1804 chronyd[3096]: chronyd version 3.2 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SECHASH +SIGND +ASYNCD
Nov 22 19:10:51 ubuntu1804 chronyd[3096]: Frequency 0.000 +/- 1000000.000 ppm read from /var/lib/chrony/chrony.drift
Nov 22 19:10:51 ubuntu1804 systemd[1]: Started chrony, an NTP client/server.
Nov 22 19:10:56 ubuntu1804 chronyd[3096]: Selected source 172.31.1.8
​
root@ubuntu1804:~# chronyc sources -nv
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 172.31.1.8                    3   6    17     1    -23us[-5512us] +/-   31ms