参考文档:​​Linux ❉ Chronyd时间同步服务器详解_wangjie722703的博客-CSDN博客_chronyd​

说明:(许多程序依赖于时间单调地向前推进

  • slew the time方法:要纠正慢了1秒的系统时钟,chronyd会稍微增加系统时钟在每个时钟中断时前进的时间,直到错误消失为止;因为许多程序依赖于时间单调地向前推进。
  • step the time方法:时钟步进,chronyd在启动时快速分几次向前或向后步进调整,只在系统启动过程中的特定时间点执行,因此其他应用软件应该不会受到step the time的不利影响。
  • !, ;, #, %:开头表示注释;
  • 对时间隔,2的n次幂表示:the minimum is -7 (1/128th of a second,7.8125ms), and the maximum is 24 (6 months)
  • NTP版本:NTPv3、v4、v5
  • chronyd从不在系统启动同步时钟之后执行时间步进。ntpd也可以配置为从不步进时间​

*: initstepslew(在chronyd启动时判断,这个指令已弃用,取而代之的是makestep指令

 在正常情况下,当chronyd需要校正系统时钟时,它会通过slew the time的方法来慢慢调整。举例来说:要纠正慢了1秒的系统时钟,chronyd会稍微增加系统时钟在每个时钟中断时前进的时间,直到错误消失为止。注意,使用此方法校正系统时钟,时间不会向后调整。 在大多数的Unix系统上,都不希望系统时钟步进,因为许多程序依赖于时间单调地向前推进。当chronyd启动时,系统时钟可能会出现相当大的错误。试图通过slew the time的方法来纠正错误,可能是非常不明智的,因为通过这种方法纠正可能需要花费数小时。

       initstepslew指令的目的是允许chronyd在启动时快速测量系统时钟的误差,并在正常运行之前通过step the time的方法来纠正误差。因为这通常只在系统启动过程中的特定时间点执行,因此其他应用软件应该不会受到step the time的不利影响。

       如果需要校正的误差小于设定的阀值,就使用slew the time的方法纠正,这使得在系统正常运行时重启chronyd变得更加安全。

       initstepslew指令后的第一个参数就是这个阀值,单位s(秒),后面若干个参数都是ntp服务器列表。列表中的每个服务器都将被快速轮询几次,并使用多数投票机制来查找一个最有可能的系统时钟误差。然后使用step或slew的方式纠正误差。随后chronyd会进入正常工作模式。

initstepslew 30 foo.example.net bar.example.net

#表示假如系统时钟误差小于30s,就使用slew方法校正;误差大于30s,就使用step方法校正。


GPSD是一系列管理GPS设备和其他用于导航与精确计时的传感器的工具,包括航海自动识别系统(marine AIS (Automatic Identification System))的无线电广播设备和电子罗盘。其中最主要的程序是一个叫做gpsd的服务守护进程,它管理这些传感器,并且在TCP/IP端口生成JSON流报告。其他的程序包括用来展示代码模型和各种诊断工具的客户端。​GPSD被广泛地部署在笔记本、智能手机以及包括自动驾驶汽车和自动潜艇在内的自动交通工具上。它在嵌入式系统中被用来导航、精确耕作、位置敏感的科学遥测、网络时间服务等,起着不容忽视的作用。GPSD支持精确计时:只要它附属的某个传感器有PPS (pulse-per-second)能力,它就能作为一个网络时间协议守护进程​ntpd​ (the Network Time Protocal Daemon)的时间源工作。GPSD的开发者与​ntpd​项目的开发者紧密合作来改善网络时间服务。​gpsd​​服务守护进程。它能够通过RS232、USB、蓝牙、TCP/IP和UDP连接从一系列附属传感器设备收集捕获量。报告一般来说会被传送到TCP/IP端口2947

refclock SOCK /var/run/chrony.ttyS0.sock refid GPS

#iburst更快地对时钟进行首次更新, minpoll 4最小间隔16秒,maxpoll 5最大间隔32秒,offline时chronyd不会尝试轮询该服务器;prefer:首选源

server 192.168.5.50 iburst minpoll 4 maxpoll 5 prefer

server 192.168.6.50 iburst minpoll 4 maxpoll 5 offline

#忽略往返延迟round-trip delay大于 0.3 秒的测量值。默认值为 3 秒

maxdelay 0.3

#maxchange offset:可接受的最大偏移量10秒;start:chronyd启动后执行至少1次clock updates才会使能该功能(不检查第一次时间更新时的时间偏差,即是chronyd进入正常工作模式时起作用 ;ignore:忽略2次,下一次(第3次)导致chronyd退出,并生成syslog消息(负值忽略所有大于阈值的offset)

maxchange 10 1 2

#超过该阈值(计算机时钟相对于参考源的差值,单位ppm),认为不可靠,不使用

maxupdateskew 100.0

# Record the rate at which the system clock gains/losses time.记录到一个文件中,会在重启后为系统时钟作出补偿

driftfile /var/lib/chrony/drift

# 使用负值,禁止这个限制。

#makestep 4 -1

#只在chronyd启动时判断,大于1秒阈值时,3次步进调整系统时钟.避免纠正系统时钟调整用时过长。

makestep 1.0 3

# Enable kernel synchronization of the real-time clock (RTC).系统时间每11分钟会拷贝到实时时钟(RTC)

rtcsync

# Enable hardware timestamping on all interfaces that support it.

#hwtimestamp *

#使得可以在chronyc中使用settime命令手动设置时间

manual

# 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

#allows access from all addresses (both IPv4 or IPv6)

allow all

# Serve time even if not synchronized to a time source.

local stratum 2

# Specify file containing keys for NTP authentication.

#keyfile /etc/chrony.keys


# Specify directory for log files.

logdir /var/log/chrony

# Select which information is logged.

#log measurements statistics tracking