Debian 8.
Хост-система, никакой виртуализации.
Системы синхронизации времени отключены. ntp, rdate, sdwdate нет.
# timedatectl
Local time: Thu 2019-08-22 14:02:05 +03
Universal time: Thu 2019-08-22 11:02:05 UTC
RTC time: Thu 2019-08-22 11:00:10
Time zone: Europe/Minsk (+03, +0300)
NTP enabled: no
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
Спустя секунду после установки времени оно изменяется на несколько минут.
Примеры:
# ntpdate 0.ru.pool.ntp.org && date && sleep 1 && date
22 Aug 14:02:28 ntpdate[31388]: step time server 195.211.77.68 offset -115.009072 sec
Thu Aug 22 14:02:28 +03 2019
Thu Aug 22 14:04:24 +03 2019# hwclock --hctosys && date && sleep 1 && date
Thu Aug 22 14:01:51 +03 2019
Thu Aug 22 14:03:46 +03 2019# date -s "2019-08-22 14:04:53" && date && sleep 1 && date
Thu Aug 22 14:04:53 +03 2019
Thu Aug 22 14:04:53 +03 2019
Thu Aug 22 14:06:49 +03 2019
При ручной смене в логах появляются сообщения
Aug 22 16:30:50 wisi systemd[1200]: Time has been changed
Aug 22 16:30:50 wisi systemd[1]: Time has been changed
Aug 22 16:32:45 wisi systemd[1200]: Time has been changed
Aug 22 16:32:45 wisi systemd[1]: Time has been changed
здесь первые две строки о ручной смене, вторые две о том, что система "скорректировала" время обратно.
Попытки отключения
[ul]timers.target time-sync.target systemd-timesyncd
[/ul]
результатов не дали.
В логах tcpdump видно, что по 123-у порту при "корректировке" запросов нет.
Время "корректировки" не постоянно и изменяется, наблюдалось от 1 до 5 минут.Чем она вызвана и как от неё избавиться?
Может аппаратная неисправность чипа RTC?
> Может аппаратная неисправность чипа RTC?Аппаратное время корректно, оно не "плавает". Проблема именно с системным временем.
Решено.
Оскам меняет время на предыдущее. Очень мудро было закомментировать WARNING в исходниках.https://github.com/gfto/oscam/blob/2780c48789c8e1427df4078ea...
#if defined(CLOCKFIX)
if (tv.tv_sec > lasttime.tv_sec || (tv.tv_sec == lasttime.tv_sec && tv.tv_usec >= lasttime.tv_usec)){ // check for time issues!
lasttime = tv; // register this valid time
}
else
{
tv = lasttime;
settimeofday(&tv, NULL); // set time back to last known valid time
//fprintf(stderr, "*** WARNING: BAD TIME AFFECTING WHOLE OSCAM ECM HANDLING, SYSTEMTIME SET TO LAST KNOWN VALID TIME **** \n");
}