目录

htpdate

标签 :GAC-350 htpdate

GAC-350 放弃ntpdate采用htpdate,通过/etc/default/htpdate配置为deamon模式,并且尝试从多个门户网站同步时间。但是测试反馈从开机无网络到网络恢复的时候同步时间未及时恢复,需要等待一段时间。

HTP_SERVERS="baidu.com youku.com taobao.com"
HTP_OPTIONS="-D -d -s -t"

初步怀疑第一次未正常获取到时间后,默认轮询周期过大,导致未及时同步,在man htpdate找到轮询周期的描述,从这里看这里默认的轮询周期在30分钟至32小时。

-m -M  These options specify the minimum (-m) and maximum (-M) polling intervals for HTP requests, in seconds. The default range is between 30 minutes and 32 hours. Htpdate calcu‐
              lates the optimal polling frequency between minimum and maximum values. Only applicable when running in daemon mode.

code review

https://salsa.debian.org/debian/htpdate

sudo apt-get source htpdate            #htpdate-1.1.0

仔细走读了代码,发现这里的最小时间和最大时间有很多规则,理顺完整原理后再详细介绍这里的规则。

而对于轮询时间和异常处理,如下规则:

综上,如果未通过-m 或者 -M 默认最小轮询时间为30(DEFAULT_MIN_SLEEP)分钟,开机无网络,如果在半个小时内恢复网络,最多等待10分钟(最小时间30/服务器数量3),如果在30分钟后恢复网络,最多等待30分钟(默认最小时间);

如果同步时间,30分钟后再次又存在误差,如果误差在于秒级别,调整时间,如果误差大于秒级别调整时间会失败,参考[通过date -s 修改时间未及时同步](#Troubleshooting/通过date -s 修改时间未及时同步)。

同步时间后不存在误差,时间按照-m传递时间默认(30分钟)递增,直到-M传递的最大值,默认32小时;

modify

如果只是修改开机网络恢复未及时同步的情景,直接尝试修改/etc/default/htpdate,增加-m 和-M 设置最小和最下时间即可。

HTP_OPTIONS="-D -d -s -t -m 60 -M 65"

查看日志

sudo  cat /var/log/syslog |grep htpdate

提示:需要通过-d启用debug模式;

Troubleshooting

通过date -s 修改时间未及时同步

注意:如果上一次成功同步时间,则默认需要等待30分钟(DEFAULT_MIN_SLEEP)

$sudo  cat /var/log/syslog |grep htpdate
Nov  5 20:18:33 mxj-zbcs-310 htpdate: Adjusting 252461173.667 seconds

如果成功设置(-s)一次时间后,修改时间模式设置为调整模式(-a),该模式下主要是调整小误差延时,出现在过大时间会直接设置失败。

//htpdate.c Line.311
case 1:                     /* Adjust time smoothly */
    timeofday.tv_sec  = (long)timedelta;
    timeofday.tv_usec = (long)((timedelta - timeofday.tv_sec) * 1000000);

    printlog( 0, "Adjusting %.3f seconds", timedelta );

    /* Become root */
    if ( seteuid(0) ) {
        printlog( 1, "seteuid()" );
        exit(1);
    } else {
        return( adjtime(&timeofday, NULL) );       
    }

PS: 最新版本1.2.0-2现象一致,说明htpdate deamon 模式为考虑此问题,如果要解决此问题可能只有在非deamon模式,每次通过-s模式设置时间;

sudo htpdate -s -t  baidu.com youku.com taobao.com