记一次时间同步引起的故障

记一次时间同步引起的故障

ntpdate同步时间,时间跳跃,引起服务中断。

计划任务 #

0 4 * * * /usr/sbin/ntpdate  10.200.3.71

日志 #

Dec 30 04:00:01 localhost systemd: Created slice user-0.slice.
Dec 30 04:00:01 localhost systemd: Starting user-0.slice.
Dec 30 04:00:01 localhost systemd: Started Session 16 of user root.
Dec 30 04:00:01 localhost systemd: Starting Session 16 of user root.
Dec 29 20:09:59 localhost systemd: Time has been changed
Dec 29 20:09:59 localhost systemd: Removed slice user-0.slice.
Dec 29 20:09:59 localhost systemd: Stopping user-0.slice.

故障 #

因为跳跃的时间太大,导致系统的各种服务中断(网络中断和systemctl管理的服务也有问题)。

解析 #

ntpdate同步时间,会造成时间的跳跃,对一些依赖时间的程序和服务会造成影响。比如sleep,timer等。而且,ntpd服务可以在修正时间的同时,修正cpu

tick。理想的做法为,在开机的时候,使用ntpdate强制同步时间,在其他时候使用ntpd服务来同步时间。

要注意的是,ntpd有一个自我保护设置: 如果本机与上源时间相差太大, ntpd不运行. 所以新设置的时间服务器一定要先ntpdate从上源取得时间初值,

然后启动ntpd服务。ntpd服务运行后, 先是每隔指定的时间与上源服务器同步一次, 根据每次同步时测得的误差值经复杂计算逐步调整自己的时间,

随着误差减小, 逐步增加同步的间隔. 每次跳动, 都会重复这个调整的过程.