Как проверить, что ntpd все еще работает и синхронизируется

Я вызываю ntp_gettime(), и он работает так, как ожидалось, однако, если я убью ntpd, я все еще получаю правильное поведение с моим возвращаемым значением, не показывающим проблем. Это говорит о том, что ntp_gettime() не вызывает ntpd, что, как я полагаю, и происходило.

Я пытаюсь проверить, что ntpd все еще работает правильно и что у него все еще есть действительное соединение. Теперь я предполагаю, что ntpd обновляет систему на основе заданного интервала, а вызов ntp_gettime() вызывает только систему.

Мой вопрос: можно ли использовать ntp_gettime() для определения того, работает ли ntpd и действительно ли соединение с сервером, и я только что где-то ошибся? Если нет, есть ли способ сделать это?


person Aazarus    schedule 15.12.2019    source источник
comment
Попробуйте nttpq -pcrv, который запрашивает состояние сервера и возвращает много разных вещей, которые вы можете проверить. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать   -  person user3788685    schedule 16.12.2019


Ответы (3)


Ответ на ваш вопрос "нет". Это не интерфейс к NTP-серверу, и его нельзя использовать для определения состояния NTP-сервера. Это нечто совершенно другое. Согласно документации glibc:

Функции ntp_gettime и ntp_adjtime предоставляют интерфейс для мониторинга и управления системными часами для обеспечения высокой точности времени. Например, вы можете точно настроить скорость часов или синхронизировать их с другим источником времени.

Обычно эти функции используются сервером, реализующим сетевой протокол времени, для синхронизации часов нескольких систем и высокоточных часов.

Другими словами, это то, что сам NTP-сервер использует для общения с ядром, чтобы заботиться о бизнесе.

person Sam Varshavchik    schedule 15.12.2019
comment
Большое спасибо. Мой вопрос не о сервере конкретно, а о ntp-клиенте. Если ntp_gettime не может сообщить мне, запущен ли и синхронизирован ли ntpd, есть ли другой способ сделать это? - person Aazarus; 15.12.2019
comment
Вы можете узнать, работает ли ntp, проверив, привязано ли что-то к его порту через /proc/net/udp. Что касается состояния, вам нужно покопаться в инструменте командной строки ntpdc или ntpclient, который делает это, и посмотреть, как он получает эту информацию. Источник в свободном доступе, в конце концов... - person Sam Varshavchik; 15.12.2019
comment
Спасибо за попытку, Сэм, цените усилия. Рассмотрю ваше предложение. - person Aazarus; 15.12.2019

Проверка работы демона

ntpctl — это программа для отображения информации о работающем демоне ntpd. Приведенная ниже команда предоставит вам информацию о количестве серверов, с которыми синхронизируется демон, статус системных часов, если они синхронизированы/несинхронизированы, и смещение часов. Для получения дополнительной информации см. справочную страницу ntpctl https://man.openbsd.org/ntpctl. Пакет Openntpd содержит программу ntpctl.

ntpctl -s all
person wuseman    schedule 16.12.2019

В итоге я сделал это, используя канал для вызова ntpstat и обработки вывода. То есть я проверяю наличие несинхронизированных, синхронизированных и отсутствие синхронизированных (после проверки на несинхронизированные) и действую соответственно, основываясь на результатах выше.

Если есть лучший способ получить тот же результат, потому что я думаю, что это беспорядочно, дайте мне знать.

person Aazarus    schedule 16.12.2019