Игнорировать источник хронии с явно неправильным временем
У меня есть робот, и я использую Timemaster, чтобы запустить Chrony и добавить источник PTP из моего GPS. Когда я запускаю робота внутри, где он не может определить местоположение спутника, GPS сообщает, что сейчас 5 января 1980 года. В результате я получаю выбранный источник уровня 0, а время увеличивается до 1980 года (потому что у меня есть «makestep 1 3» настроен для chrony), а затем, когда я вывожу робота на улицу и GPS начинает показывать правильное время, оно начинает сдвигаться в сторону 2021 года, которого он, конечно, никогда не достигнет. Список источников хронии выглядит, например, так:
[root@robot user]# chronyc sources
210 Number of sources = 5
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
#x PTP0 0 2 377 4 +15173d[+15173d] +/- 8760us
^* ipv4.ntp1.rbauman.com 2 6 377 38 -43ms[ -15ms] +/- 134ms
^- 150.136.0.232 2 7 377 148 -59ms[ -31ms] +/- 192ms
^+ 38.229.58.9 2 8 377 216 +30ms[ +55ms] +/- 124ms
^+ ntp.speculation.org 2 7 377 38 -5919us[ +22ms] +/- 130ms
При сборе этих данных у меня было правильно установлено время, поэтому вы можете видеть, что первый источник отклоняется на 15173 дня, поскольку 2021–1980 годы = 15000 дней.
Простое и очевидное решение, которое мы используем, — это выключить все, а затем снова включить, как только мы окажемся снаружи, но я надеялся, что есть опция конфигурации chrony (или опция конфигурации timemaster), которую мне не хватает, которая будет игнорировать источники (даже если они претендует на статус слоя 0), если он отстает, скажем, на 20 лет или какой-то другой такой огромный период времени.
Я пытался изменить настройки шага выполнения, но это на самом деле усугубляет проблему, потому что, если мы отключим шаг, кто-то будет работать с роботом внутри в течение нескольких часов, часы на несколько часов сдвинутся к 1980 году, а затем часы будут неправильными, пока не смогут быть отклонён назад на равное количество времени.
Спасибо за любые ваши идеи. На самом деле я делаю это на трех встроенных компьютерах под управлением разных операционных систем, поэтому не могу указать версию Linux или версию Chrony. Если у вас есть исправление, которое работает только в последней версии Chrony, я буду рад это услышать!
1 ответ
Обратите внимание, что выходные данные вашего источника указывают, что PTP0 исключен из -за огромного смещения. И у вас есть что-то вроде источников пула NTP, которые согласовываются в течение 200 мс, если они доступны. Последнее означает, что это было бы правильно, если бы PTP0 не сделал это немедленно.
Удалитьmakestep
строку и замените ее чем-то вроде
initstepslew 1 2.pool.ntp.org
Когда chronyd запустится, он отправит несколько пакетов в стиле iburst и при необходимости выполнит шаг. Поскольку это только NTP, на него не повлияет проблема с исправлением GPS.
Если IP-сети часто недоступны, например, на улице, просмотритеman chrony.conf
для примеров «нечастого подключения» и «изолированных сетей». Отметьте серверы NTP как автономные и онлайновые в сетевых сценариях. Настройте NTP-серверы на некоторых компьютерах в локальной сети. Любая машина, даже с плохими часами реального времени, была бы ближе, чем начало эпохи GPS.
Возможно, следует настроить параметры серверов в chrony.conf, чтобы они не полагались только на GPS. Например:
pool 2.pool.ntp.org require
где пул.ntp.org — ваши настроенные NTP-серверы.require
означает, что эти серверы не должны быть исключены для корректировки времени. Тогда потребуются доступные NTP-серверы, однако Chrony хорошо компенсирует дрейф даже при отключении.