2016-04-04 13 views
4

Справочная информация: Привет, В настоящее время я работаю со старой системой Linux SBC. Он использует BusyBox v1.00-rc2, который является старым и имеет ограниченную функциональность. (нет, обновление не вариант). Этот SBC был подключен к нескольким датчикам, записывая значение и время, отпечатав его.Как ускорить скачок во времени, чтобы избежать потери данных

Проблема: После нескольких лет, RTC отнесла от фактического времени, и некоторые из SBC задержать более 1hours (медленнее) от фактического времени.

Я не могу просто выполнить ntpdate с серверами ntp, потому что это вызовет скачок времени и вызовет огромный разрыв в журнале мониторинга данных. Это неприемлемо.

Решение: Я создал Баш скрипт, который будет:

  1. Проверьте нтп смещение с серверами СБК и НТП
  2. Затем, запишите смещение в переменной
  3. , если значение смещения больше 7, например (смещение 60 секунд), сценарий будет постепенно увеличивать системные часы, используя date -s.
  4. Это увеличит только на максимум 60 секунд каждый час
  5. Пример:
    • СБК время 14:59:00 4 апреля 2016
    • Фактическое время от NTP серверов 15:00:00 4 апреля 2016
    • Если я использую Ntpdate -q -4 utcnist2.colorado.edu он вернется с 60 секунд смещение
    • Итак, мой Сценарий будет только увеличиваться 7 секунд каждые 450 секунд
    • С этой логикой, SBC время будет кетчуп с нтп времени вокруг апр четвёртый 16:04:17 2016
    • проблема, этих скрипту удается медленно отрегулировать время, шаг за шагом, BUT иногда, это пойдет на haywire, и время SBC будет быстрее по сравнению с фактическим временем (время Ntp), и это приведет к потере данных (сервер не примет, если Время SBC быстрее, чем время сервера).

Вопросы:

  • есть ли другой способ сделать добавочное время прыжка, похожее на это?
  • Я заметил, что ntpdate имеет функцию -B, которая будет выполнять инкрементное обновление времени, но я не смог использовать это на SBC. Каков правильный метод использования этого переключателя? Или я неправильно понял его функциональность?
  • Может ли adjtimex достичь этих целей?
  • Вот мой полный Баш скрипт, если любой из вас нужно (слишком долго, чтобы вставить здесь),

http://pasted.co/65beb3db [пароль: 123456]

+0

Как близко вы можете добраться до реального времени, используя свой скрипт? Вы также просмотрели эту страницу (http://support.ntp.org/bin/view/Dev/DeprecatingNtpdate) - в частности, «ntpd -x», которая может помочь. – user3788685

+0

@ user3788685, привет и спасибо за предложение. (- Насколько близок мой сценарий в реальном времени?) Ans: Мой скрипт будет увеличиваться на 7 секунд каждые 7,5 минут (450 секунд), он будет делать это до тех пор, пока возврат NTP-серверов не будет равен 7 и будет синхронизировать с фактическим временем. Итак, чтобы ответить на этот вопрос, я думаю, что он довольно близок (~ 1сек.). (- Относительно ntpd -x) Ans: да, но похоже, что он не работает с версией busybox, которую я запускаю прямо сейчас. Или, может быть, мой синтаксис неверен? – Mie

+0

У Busybox всегда было немного недостатка, когда я пробовал это год назад - у него не было все построено/работает. Я думал, что если ваш скрипт заставит вас достаточно близко, чтобы не прыгать, включите ntpd, чтобы держать вещи в проверке без необходимости запуска скрипта (или я здесь что-то не хватает) – user3788685

ответ

0

Я пришел к выводу о к этому важно. Есть 2 решения (из моего опыта Может быть, больше, Вы можете добавить..):

Решение 1

  • Источник: http://www.ep.ph.bham.ac.uk/general/support/adjtimex.html
  • Метод: Изменение числа линукс клеща и частоту. Все расчеты можно увидеть внутри JavaScript на LSLowe в bham.ac.uk (в ссылке)
  • Пример: Если я хочу, чтобы ускорить системные часы на 60 секунд быстрее, каждый час, мне нужно изменить (тик = 10167) и (частота = -2184533) и применять его с помощью Adjtimex -t -f 10167 -2184533

Решение 2(Что то, что я использую сейчас)

  • На моем вопросе выше, я уже упоминал, что я использую старую версию BusyBox, которую я не могу использовать многие из последней функции, такие как ps -anySwitch, чтобы получить pid текущего текущего процесса. Команда Pidof myscript.sh также не дала результата.
  • Итак, в моем сценарии bash выше я создаю функцию поверх скрипта, так что каждый раз, когда мой скрипт запускается cron, который каждые 15 минут, мой скрипт будет проверять с pid, который хранился внутри файла. Если pid все еще запущен, новый скрипт завершится. Это делается для предотвращения запуска нескольких сценариев каждые 15 минут.
  • Я подозреваю, что существует некоторый недостаток этого метода. По какой-то причине сценарий будет запускаться несколько раз и заставляет ускорение времени становиться быстрее (поскольку имеется несколько сценариев)
  • Итак, чтобы избежать этого подозрения, вместо запуска скрипта каждые 15 минут я модифицировал cron запустить другой скрипт, чтобы проверить, работает ли мой скрипт или нет.
  • Я обнаружил, что если я запускать свой скрипт, используя этот ме->./myScript, я могу получить номер с помощью ПИД-регулятора pidof MyScript
  • Таким образом, это будет гораздо уверяя использовать этот метод и избежать любая серая область.
  • До сих пор, похоже, я уже решил свою проблему.! Пример
  • Launcher Сценарий:

/бен/ш

PID = pidof NTP_Update

если [-n "$ PID"]; затем эхо «NTP_Update работает ...» еще эхо «NTP_Update не работает ...» кд/корень/скрипт ./NTP_Update фи


Надежда эта работа вокруг метод поможет кто-нибудь, что изо всех сил со старой версией busybox.