技术标签: Linux 时间同步服务 Chrony
Chrony
是一个多功能的 NTP (Network Time Protocol)
实现,类 Unix
系统上 NTP
客户端和服务器的替代品。它可以通过 NTP
服务或者类似 GPS
时钟接收器的硬件级参考时钟来同步系统时钟,具有更好的时钟准确度,并且对于那些间歇性互联网连接的系统很有帮助。Chrony
是免费开源的,并且支持 GNU/Linux
和 BSD
衍生版(比如:FreeBSD
、NetBSD
)、macOS
和 Solaris
等。
Chrony
有两个核心组件:一个是 chronyd
守护进程,主要用于调整内核中运行的系统时间和时间服务器同步。它确定计算机增减时间的比率,并对此进行调整补偿。另一个是 chronyc
,它提供一个用户界面,用于监控性能并进行多样化的配置。chronyc
可以在 chronyd
实例控制的计算机上工作,也可以在一台不同的远程计算机上工作。
Chrony 和 NTPD 精度对比测试
我们可以从 Chrony
的官方网站上可以看到与 NTPD
各维度详细对比:
从其测试结果上看似乎是各维度性能都可以吊打 NTPD
。因此 Chrony
对自身的整体评价还是比较高的。
Chrony 相较于 NTPD 服务的优势
从 Centos 7.x
开始的最小发行版中都已经预装并开启了 Chrony
。如果你的系统上没有安装 Chrony
,你也可以使用下面的命令轻松安装它。
$ yum -y install chrony # [On CentOS/RHEL]$ apt install chrony # [On Debian/Ubuntu]$ dnf -y install chrony # [On Fedora 22+]
安装完成后,你可以使用以下命令来检查 chronyd
的状态。
$ systemctl status chronyd # [On SystemD]$ /etc/init.d/chronyd status # [On Init]
如果要在开机引导时自动启用 Chrony
的守护程序,你可以使用以下命令来实现。
$ systemctl enable chrony # [On SystemD]$ chkconfig --add chronyd # [On Init]
Chrony
的默认配置文件为 /etc/chrony.conf
,下面将介绍一些常用的配置项。
server
指令用于指定要同步的 NTP
服务器。
server 0.centos.pool.ntp.org iburst
其中的 0.centos.pool.ntp.org
是 NTP
服务器的地址,默认有四组官方的 NTP
服务器。你也可以修改为自定义的时间服务器,例如:ntp1.aliyun.com
。
iburst
是参数, 一般用此参数即可。该参数的含义是在头四次 NTP
请求以 2s
或者更短的间隔,而不是以 minpoll x
指定的最小间隔,这样的设置可以让 chronyd
启动时快速进行一次同步。
其他的参数有 minpoll x
默认值是 6,代表 64s
。maxpoll x
默认值是 9,代表 512s
。
Chrony
会根据实际时间计算修正值,并将补偿参数记录在该指令指定的文件里,默认为 driftfile /var/lib/chrony/drift
。
与 ntpd
或者 ntpdate
最大的区别就是,Chrony
的修正是连续的,通过减慢时钟或者加快时钟的方式连续的修正。而 ntpd
或者 ntpdate
搭配 Crontab
的校时工具是直接调整时间,会出现间断,并且相同时间可能会出现两次。因此,请放弃使用 ntpd
、ntpdate
来校时。
此指令使 Chrony
根据需要通过加速或减慢时钟来逐渐校正任何时间偏移。例如:makestep 1.0 3
,就表示当头三次校时,如果时间相差 1.0s
, 则跳跃式校时。
启用内核时间与 RTC
时间同步 (自动写回硬件)。
该参数用于指定 Chrony
日志文件的路径。
该参数用于设置当 chronyd
从可用源中选择同步源时,每个层应该添加多少距离到同步距离。默认情况下设置为 0,让 chronyd
在选择源时忽略源的层级。
基本上常用的参数就只有这几个了,通常默认的配置文件就可以直接使用了,下面我们来看一个修改完成后的配置文件内容。
# 这里只修改了 server 中的 NTP 服务器地址,如果网络环境良好可以使用默认配置server ntp1.aliyun.com iburstserver ntp2.aliyun.com iburst driftfile /var/lib/chrony/driftmakestep 1.0 3rtcsynclogdir /var/log/chrony
为了检查 Chrony
是否实际同步,我们将使用它的命令行程序 chronyc
来验证。
$ chronyc tracking Reference ID : 78197314 (120.25.115.20)Stratum : 3Ref time (UTC) : Fri Jun 28 13:58:17 2019System time : 0.000042858 seconds slow of NTP timeLast offset : -0.000187823 secondsRMS offset : 0.001029734 secondsFrequency : 17.614 ppm slowResidual freq : +0.008 ppmSkew : 5.552 ppmRoot delay : 0.034440458 secondsRoot dispersion : 0.002149768 secondsUpdate interval : 64.1 secondsLeap status : Normal
这里主要关注 Update interval
这个参数, 说明最后两次更新的时间间隔是 64.1s
。以上结果中的其它参数的含义分别是:
ID
- 计算机当前同步的引用 ID
和名称。Stratum
- 连接参考时钟的计算机的跳数。UTC
时间。RMS
偏移 - 偏移值的长期平均值。chronyd
没有纠正它,那么系统的时钟错误的速率。它以 ppm
(百万分率)提供。这里需要注意的是第二个参数,*
代表当前同步的源,-
代表通过组合算法计算后排除的源。
$ chronyc sources -v 210 Number of sources = 2 .-- Source mode '^' = server, '=' = peer, '#' = local clock. / .- Source state '*' = current synced, '+' = combined , '-' = not combined,| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.|| .- 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===============================================================================^* 120.25.115.20 2 6 37 12 +85us[ -960us] +/- 20ms^- 203.107.6.88 2 6 37 12 +262us[ +262us] +/- 21ms
$ chronyc activity
$ journalctl -u chronyd
$ chronyc accheck
$ chronyc activity
$ chronyc add server
$ chronyc clients
$ chronyc delete
$ chronyc settime
$ chronyc tracking
$ chronyc accheck
$ chronyc sources -v
$ chronyc sourcestats -v
Chrony
客户端程序的功能非常强大,远不止上面介绍这些。不但支持命令行模式,而且还支持交互模式。如果你想了解更多 Chrony
客户端程序的使用方法,可以使用 man chronyc
命令获取更多帮助。
要将 Chrony
作为一个 NTP
服务器,方法很简单。
首先,你需要修改 /etc/chrony.conf
文件,并添加以下配置即可。
# 对于安全要求比较高的,这里可以限制谁能访问本机提供的 NTP 服务。allow 192.168.1.0/24 # 设置 chronyd 监听在哪个网络接口bindcmdaddress 0.0.0.0 # 这个地方很重要,如果服务器本身也不能同步时间,那么就用本地时间替代,层级为 10local stratum 10
其次,重启 Chronyd
服务,以加载新的配置。
$ systemctl restart chronyd
Chronyd
服务启动成功后,会监听以下两个端口。
123/udp
为标准的 NTP
监听端口,如果要对外提供 NTP Server
功能,必须开启防火墙和监听地址为外部可访问地址。如需修改,你可以通过配置 port
参数来修改。323/udp
为默认的管理端口。如需修改,你可以通过配置 cmdport
参数来修改。最后,修改防火墙设置,以放行对 123/udp
的请求,这里以 CentOS 7
的 Firewalld
为例。
$ firewall-cmd --zone=public --add-port=123/udp --permanent$ firewall-cmd --reload
公共 NTP
服务网上很多,但国内环境下最好用的应该还属阿里云的公网 NTP
服务。
UTC
整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时 (UTC, Universal Time Coordinated
)。GMT
格林威治标准时间 (Greenwich Mean Time
) 指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。( UTC
与 GMT
时间基本相同)CST
中国标准时间 (China Standard Time
)GMT
+ 8 = UTC
+ 8 = CST
DST
夏令时 (Daylight Saving Time
) 指在夏天太阳升起的比较早时,将时间拨快一小时,以提早日光的使用。(中国不使用)RTC (Real-Time Clock)
或 CMOS
时间,一般在主板上靠电池供电,服务器断电后也会继续运行。仅保存日期时间数值,无法保存时区和夏令时设置。RTC
时间,之后独立运行,保存了时间、时区和夏令时设置。# 直接使用 timedatectl 命令也等同于以下命令$ timedatectl status Local time: Fri 2018-2-29 13:31:04 CST Universal time: Fri 2018-2-29 05:31:04 UTC RTC time: Fri 2018-2-29 08:17:20 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: yesNTP synchronized: yes RTC in local TZ: no DST active: n/a
如果你当前的时区不正确,请按照以下操作设置。
# 查看所有可用的时区$ timedatectl list-timezones # 查看上海可用时区$ timedatectl list-timezones | grep -E "Asia/S.*"Asia/SakhalinAsia/SamarkandAsia/SeoulAsia/ShanghaiAsia/SingaporeAsia/Srednekolymsk # 设置当前系统为 Asia/Shanghai 上海时区$ timedatectl set-timezone Asia/Shanghai # 设置完时区后,在强制同步下系统时钟$ chronyc -a makestep200 OK
$ timedatectl set-time "YYYY-MM-DD HH:MM:SS"$ timedatectl set-time "YYYY-MM-DD"$ timedatectl set-time "HH:MM:SS"
# 可以只修改其中一个$ timedatectl set-time "2019-10-31 15:50:00"
# 硬件时间默认为 UTC,下面两条命令效果等同$ timedatectl set-local-rtc 1$ hwclock --systohc --localtime
# yes 或 no,1 或 0 也可以$ timedatectl set-ntp yes/no$ timedatectl set-ntp true/flase
文章浏览阅读7.4k次,点赞11次,收藏32次。在springboot项目中,我们只需要引入spring-boot-starter-web依赖,启动服务成功,我们一个web服务就搭建好了,没有明显的看到tomcat。其实打开spring-boot-starter-web依赖,我们可以看到:依赖了tomcat。1.进入Springboot启动类。我们加入Springboot最核心的注解@SpringBootApplication,源码如下图:重点看注解@EnableAutoConfiguration,2.进入注解@EnableAutoCo._springboot是如何启动tomcat的
文章浏览阅读2.4k次。界面效果下载以及引入npm install echarts -S在main.js中引入echartsimport echarts from ‘echarts’Vue.prototype.$echarts = echarts创建板块 <div class="echartsLeft1 echart"> <div class="HelloWorld echart-box" id="myChart1" ></div>_vue扇形图
文章浏览阅读54次。const: 1 定义变量 ,如下写法都可以: TYPE const ValueName = value; const TYPE ValueName = value; 2 当作为全局变量并且在他文件也想使用时:(默认const具有局部性) 1.CPP :extern const..._conest stateline
文章浏览阅读474次。学习与工作经历2003年-2005年,西北工业大学自动化学院,自动控制专业,在读2005年-2008年,西北工业大学数学系,应用数学,学士2008年-2011年,福州大学离散数学中心,应用数学,硕士 (导师:范更华 教授)2011年-2015年,西北工业大学数学系,应用数学,博士 (导师:张胜贵 教授)2015年-2020年,天津大学数学学院,讲师2017.12-2018.6, 新加坡南洋理工大学..._南开大学宁博
文章浏览阅读9.1k次,点赞14次,收藏73次。一直以来,对于手眼标定所涉及到的坐标系及坐标系之间的转换关系都没能有一个很好的理解,最近找了halcon手眼标定的实例在研究,发现对于相机的两种安装方式(眼在手和眼在手外),其坐标转换关系是类似的,这样说好像太抽象了,下面具体说说。我觉得标定最基本的是要将坐标系理清楚,这里涉及到的坐标系有四个:机器人基坐标系base、法兰上的工具坐标系tool、相机坐标系camera和标定板坐标系cal;此外..._halcon机械臂
文章浏览阅读1.7w次。win10神州网信政府版系列设置文章目录1、麦克风1.1 可直接更改1.2 更改按钮不可用2、摄像头3、屏幕保护1、麦克风1.1 可直接更改隐私设置里面,《更改》按钮未变灰,可以直接更改1.2 更改按钮不可用win+R 后输入gpedit.msc打开组策略管理器修改如下路径设置后,更改按钮就可以使用了:计算机配置->管理模板->Windows组件->应用隐私->允许Windows应用访问麦克风 / 允许Windows应用访问相机之后参照1.1设置2、摄像_神舟网信屏幕保护程序设置
文章浏览阅读124次。varchar和varchar2有什么区别?该博客文章激发了这个问题的机率是多少? joelonsoftware.com/articles/GuerrillaInterviewing3.html目前,它们是同义词。根据ANSI标准的规定,Oracle保留VARCHAR,以支持将来区分NULL和空字符串。VARCHAR2不能区分NULL和空字符串,也永远不会。如果您依赖空字符串并且NULL是同一件事..._从 oracle 8 开始,oracle 将 varchar 定义为 varchar2 的同义词
文章浏览阅读1w次。看了看手机上的UI字体,在同样的 到电脑上输入同样的字总感觉电脑端怪异,不如手机端好看。起先以为是字体原因,就尝试了各种字体,后来发现还是不对。为了搞清楚 手机上的样式,找了篇微信的文章放到电脑上剖析:发现了几点: 字体默认苹果字体 font-family: -apple-system-font,BlinkMacSystemFont,"Helvetica Neu..._-apple-system-font
文章浏览阅读2.3k次。 pg_ctl -D "d:\dev_tools\pgsql\data" -l logfile start ==>启动服务 pg_ctl -D "d:\dev_tools\pgsql\data" -l logfile stop ==>关闭服务 当前版本是 psql (PostgreSQL) 9.3.3 ..._psql 命令行关闭服务
文章浏览阅读1k次。本来项目使用的是OCX方式做签字的,因为项目需要转到国产化,不在支持OCX方式,需要使用前端进行签字操作注:有啥问题看看文档,或者换着思路来,本文仅供参考!_layui签字插件
文章浏览阅读787次,点赞2次,收藏4次。问题 连接提示错误错误QSqlDatabase:QMYSQL Driver not loadedQSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL3 QODBC QODBC3 QPSQL QPSQL7 "Driver not loaded Driver not loaded"Driver not loaded Driver not loaded原因没有QMYSQL 驱动._d:\qt\qt5.12.10\5.12.10\src\qtbase\src\plugins\sqldrivers\mysql\qsql_mysql_p
文章浏览阅读1.1w次,点赞16次,收藏125次。这里写自定义目录标题优化算法进行神经网络的参数寻优,解放深度调参1.已经实现的Genetic Algorithm优化Neural Network功能快捷键2.已经实现的PSO优化Neural Network如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入优化算法进行神经网_优化算法与神经网络结合