我之前由于测试了SSL证书过期如何延期,我把服务器的时间往后调了一年。事后我没有把服务器的时间调整回去,服务器上安装了chronyd服务,我原以为时间会在不久之后修正回去。然而直到我发现Prometheus无法工作才知晓,时间并没有及时修正。
我检查了chronyd的服务状态是正常运行,配置也没有问题,配置是:
# cat /etc/chrony.conf |egrep -v '^$|#'
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony
其中 makestep 参数用于控制在启动时或手动强制同步时的最大步长。具体来说,它有两个子参数:
- 第一个参数:最大步长(以秒为单位)。如果系统时间与NTP时间的偏差超过这个值,chronyd 会进行一步调整。
- 第二个参数:最大步长的允许次数。如果在一定时间内多次需要进行大步调整,chronyd 会限制调整次数。
rtcsync 参数用于启用或禁用将系统时间写入实时时钟(RTC, Real-Time Clock)的功能。实时时钟是硬件时钟,通常在系统关机后仍然保持时间。
那么为什么时间没有及时的修正呢?我只有在手动重启chronyd服务之后,时间才正确修正了呢?
原来chronyd不是一下子就修正时间的,它是逐步调整时间的,具体请查看如下截图,chronyc tracking 检查每隔一段时间的时间差是越来越小的。
图片
其实我们也可以手动强制 chronyd 进行时间同步,而不需要重启服务。
chronyc makestep
这个命令会强制chronyd立即调整系统时间,而不是逐步调整。
图片
所以假如我们在服务器上时间相差太大,建议直接执行下 chronyc makestep,另外测试好需要及时恢复环境,或者临时新建一个测试服务器处理。