Как проверить, успешно ли NTPD время машины использует оболочку?

Я пытаюсь использовать NTPD для обновления времени моей Linux-машины до указанного NTP-сервера.
Вот сценарий:

Каждый раз, когда запускается Linux-машина, я хочу обновить время с сервера NTP, и если это не удастся, я хочу попробовать снова каждые 5 минут до успешного завершения (максимум 2 часа).

Я обыскал и обнаружил, что должен (?) Использовать NTPD и использовать некоторую команду:

#ntpdate ntp.server.com (перед запуском NTPD)
#ntpd some_options_to_start

Вопросы:

  1. Как я могу узнать, было ли время успешно обновлено этими командами?
  2. Могу ли я установить интервал для обновления времени из ntpd? (или мне нужно использовать что-то вроде sleep и loop with do .. while / for in shell?)

Обратите внимание, что я хочу выполнить указанные выше команды в сценарии оболочки и поместить оболочку на веб-сервер. Затем клиенты (с браузером веб-браузера) будут выполнять скрипт на веб-сайте. Поэтому мне нужно проверить, выполнено ли обновление успешно или нет, чтобы отправить результат клиенту (через Интернет).

9 Solutions collect form web for “Как проверить, успешно ли NTPD время машины использует оболочку?”

Использование сценария для мониторинга ntpd обычно не выполняется. Обычно для мониторинга демона используется инструмент мониторинга, например nagios или munin . Инструмент может отправить вам предупреждение, когда все пойдет не так. У меня есть munin электронной почте, если смещение превышает 15 миллисекунд.

Как правило, вы должны использовать нечетное количество серверов, чтобы демон мог выполнять выборы среди серверов, если он отключается. Три, как правило, адекватны, и более пяти из них чрезмерны. Клиенты вашей внутренней сети должны иметь возможность обойтись одним внутренним сервером, если вы его контролируете. Используйте легитимные серверы или интернет-провайдеры NTP или DNS в качестве источников синхронизации. Существуют публичные пулы, а также общедоступные серверы.

ntpd является самонастраивающимся, и вам не нужно настраивать его после его настройки и запуска. С недавними реализациями ntpd вы можете полностью отказаться от использования ntpdate поскольку они могут выполнять начальную настройку даты.

Следующий скрипт будет анализировать смещения на выходе ntpd и сообщать о чрезмерном смещении. Вы можете запустить его из cron, чтобы отправить вам электронное сообщение, если есть проблемы. По умолчанию сценарий используется для оповещения на расстоянии 0,1 секунды.

 #!/bin/bash limit=100 # Set your limit in milliseconds here offsets=$(ntpq -nc peers | tail -n +3 | cut -c 62-66 | tr -d '-') for offset in ${offsets}; do if [ ${offset:-0} -ge ${limit:-100} ]; then echo "An NTPD offset is excessive - Please investigate" exit 1 fi done # EOF 

Чтобы ответить на первый вопрос, ntpdate обычно сообщает вам, что он сделал, или, может быть, не сделал.

 [root@flask rc.d]# ntpdate dagoo 12 Aug 10:04:03 ntpdate[20585]: adjust time server 10.0.0.15 offset -0.042285 sec 

Демон NTP, ntpd , работает постоянно и запрашивает серверы NTP (обычно настроенные в /etc/ntp.conf ) на время так часто. Вам не нужно запускать скрипт каждые 5 минут. ntpdate должен довести машину до синхронизации с сервером, а ntpd будет работать в фоновом режиме и синхронизировать ее. Вы не устанавливаете интервал, который пытается выполнить ntpd, он настраивает интервал, исходя из того, как он воспринимает локальные тактовые дрейфы с серверов и качество соединений с серверами.

Вы можете использовать программу с именем ntpdc чтобы узнать, что ntpd хранит как информацию:

 1 % ntpdc ntpdc> peers remote local st poll reach delay offset disp ======================================================================= *min-time-01.ine 10.0.0.15 1 1024 377 0.07047 0.014673 0.14360 =dns-01.esd189.o 10.0.0.15 2 1024 377 0.07587 0.022277 0.13660 ntpdc> 

Я думаю, что число, в котором вы обычно интересуетесь, это «смещение», это количество секунд, в течение которых ваши местные часы отключены от часов сервера.

Поскольку man страница для ntpdc заявляет о команде «peers»:

 the current estimated delay, offset and dispersion of the peer, all in seconds. 

Итак, ясно, что «смещение» находится в секундах.

Похоже, что ntpdc устарел, заменен на ntpq . ntpq имеет интерактивную команду «сверстников», которая дает «смещение» в миллисекундах. Мой сервер Redhat имеет как ntpdc , так и ntpq , поэтому вам нужно быть осторожным.

ntp-wait был сделан для этой проблемы.

Пять минут с man ntp-wait и вы должны работать и работать …

Используйте ntpstat.

 myserver # ntpstat synchronised to NTP server (10.89.160.13) at stratum 4 time correct to within 124 ms polling server every 1024 s 

Я добавил к скрипту @BillTHor bash также проверку для кода выхода ntpdstat> 0:

 #!/bin/bash ntpstat > /dev/null if [ $? -ne 0 ]; then echo "NTPD not synchronized - Please investigate" exit 1 fi limit=1000 # Set your limit in milliseconds here offsets=$(ntpq -nc peers | tail -n +3 | cut -c 62-66 | tr -d '-') for offset in ${offsets}; do if [ ${offset:-0} -ge ${limit:-100} ]; then echo "An NTPD offset is excessive - Please investigate" exit 1 fi done # EOF 

[UPDATE], поскольку скрипт, использующий вывод ntpq, был непригодным для крупного смещения (более 4 цифр смещения). Я попробовал новую версию, используя только ntpstat:

 #!/bin/bash ntpstat > /dev/null if [ $? -gt 0 ]; then echo "NTPD not synchronized - Please investigate" exit 1 fi limit=1000 # Set your limit in milliseconds here #offsets=$(ntpq -nc peers | tail -n +3 | cut -c 62-66 | tr -d '-') #offsets=$(ntpq -nc peers | tail -n +3 | tr -s ' ' | cut -d ' ' -f 9 | tr -d '-' |tr -d '.') offsets=$(ntpstat | tail -n +2 | head -n 1 | cut -c 27- | tr -d ' ms') for offset in ${offsets}; do if [ ${offset:-0} -ge ${limit:-100} ]; then echo "NTPD offset is excessive: ${offset:-0} [ms] > ${limit:-100} [ms] - Please investigate" exit 1 fi done # EOF`enter code here` 

Смещение NTP можно получить с помощью следующего UNIX-конвейера:

 /usr/sbin/ntpq -pn | /usr/bin/awk 'BEGIN { offset=1000 } $1 ~ /^\*/ { offset=$9 } END { print offset }' 

Количество одноранговых сетей NTP может быть получено с помощью следующего UNIX-конвейера:

 /usr/sbin/ntpq -pn | egrep -c '^\*|^\+' 

Для NTP offet мы используем:

  • предупреждение> 250 мс
  • критический> 500 мс

Для счетчика одноранговых сетей NTP мы используем:

  • порог предупреждения
  • критический <1

Конфигурация мониторинга NTP, подготовленная Zabbix (источник: Joyent):

 # NTP UserParameter=ntp.offset,/usr/sbin/ntpq -pn | /usr/bin/awk 'BEGIN { offset=1000 } $1 ~ /^\*/ { offset=$9 } END { print offset }' UserParameter=ntp.peers,/usr/sbin/ntpq -pn | egrep -c '^\*|^\+' 

Планы мониторинга NTP, подготовленные Nagios:

check_ntp_offset:

 #!/bin/bash # thresholds thresh_warn=250 thresh_crit=500 # metric ntp_offset=$(/usr/sbin/ntpq -pn | /usr/bin/awk 'BEGIN { offset=1000 } $1 ~ /^\*/ { offset=$9 } END { print offset }') # Exit codes STATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKNOWN=3 if [[ ! "$ntp_offset" =~ ^[0-9]+$ ]] ; then # NTP offset could not be read successfully echo "NTP OFFSET UNKNOWN - $ntp_offset" exit $STATE_UNKNOWN elif [[ "$ntp_offset" -gt "$thresh_crit" ]] ; then # NTP offset is higher than the critical threshold echo "NTP OFFSET CRITICAL - ${ntp_offset}ms (> ${thresh_crit}ms)" exit $STATE_CRITICAL elif [[ "$ntp_offset" -gt "$thresh_warn" ]] ; then # NTP offset is higher than the warning threshold echo "NTP OFFSET WARNING - ${ntp_offset}ms (> ${thresh_warn}ms)" exit $STATE_WARNING else # NTP offset is within thresholds echo "NTP OFFSET OK - ${ntp_offset}ms (< ${thresh_warn}ms)" exit $STATE_OK fi 

check_ntp_peers:

 #!/bin/bash # thresholds thresh_warn=1 thresh_crit=1 # metric ntp_peers=$(/usr/sbin/ntpq -pn | egrep -c '^\*|^\+') # Exit codes STATE_OK=0 STATE_WARNING=1 STATE_CRITICAL=2 STATE_UNKNOWN=3 if [[ ! "$ntp_peers" =~ ^[0-9]+$ ]] ; then # NTP peers could not be read successfully echo "NTP PEERS UNKNOWN - $ntp_peers" exit $STATE_UNKNOWN elif [[ "$ntp_peers" -lt "$thresh_crit" ]] ; then # NTP peers is lower than the critical threshold echo "NTP PEERS CRITICAL - $ntp_peers (< $thresh_crit)" exit $STATE_CRITICAL elif [[ "$ntp_peers" -lt "$thresh_warn" ]] ; then # NTP peers is lower than the warning threshold echo "NTP PEERS WARNING - $ntp_peers (< $thresh_warn)" exit $STATE_WARNING else # NTP peers is within thresholds echo "NTP PEERS OK - $ntp_peers (> $thresh_warn)" exit $STATE_OK fi 

Я действительно должен позволять настраивать предупреждения и критические пороги в сценариях Nagios с -w и -c. Без этого они не полностью готовы к плагинам. Дальнейшие рекомендации по этому поводу в учебнике: http://www.kernel-panic.it/openbsd/nagios/nagios6.html

Chrony, как утверждается, обрабатывает ваш прецедент лучше, чем NTPd (сеть и машина вкл / выкл, приостановка и т. Д.). Видеть

http://fedoraproject.org/wiki/Features/ChronyDefaultNTP

RE Почему я думаю, что chronny хорош: он был установлен на моей машине fedora, и у меня никогда не было проблем с ним (он использовался уже много лет). У меня никогда не было проблем с ntpd в прошлом, но если вы читаете ссылку, которую я предоставил, есть некоторая информация о том, почему chrony лучше для не всегда на машинах. Вот почему я предложил оператору попробовать, он может или не может работать лучше для него. Таким образом, это еще один хороший способ попробовать, прежде чем переходить на слишком большую настройку, оптимизировать и взломать ntpd.

 #!/bin/bash limit=100 # Set your limit in milliseconds here offsets=$(ntpq -nc peers | tail -n +3 | awk '{print $9 }' | tr -d '-') for offset in ${offsets}; do if [ ${offset:-0} -ge ${limit:-100} ]; then echo "An NTPD offset is excessive - Please investigate" exit 1 fi done 
 #!/usr/bin/bash #set -x NTPLIMIT=100 # Set your NTPLIMIT in milliseconds here offsets=$(ntpq -nc peers | tail -3 | cut -c 62-66 | tr -d '-') for offset in ${offsets}; do if [ ${offset:-0} -ge ${NTPLIMIT:-100} ]; then echo "An NTPd offset is excessive Please investigate" exit; else echo "NTP is within 0.1 second of time server" exit; fi done 

То же, что и предыдущий ответ выше, но с небольшой модификацией, поскольку предыдущая команда будет запускать оператор if для такого количества смещений, то есть если смещение равно 3, тогда он будет печатать NTP в пределах 0,1 …. 3 раза перед закрытием. Может быть раздражать, если у вас есть сервер, который долго не синхронизирован. Вероятно, есть способ удалить цикл for …

  • sed: удалить все совпадения в файле и вставить некоторые строки, в которых первое совпадение было
  • Синхронизировать дату и время на вычислительных узлах
  • Как узнать, поддерживает ли моя система текущее время системы?
  • NTP симметричный режим
  • Синхронизация NTP в CentOS 7
  • Порт net / ntp FreeBSD запрещен CVE-2013-5211, без поддержки вверх по течению
  • Разница между хронидом и ntpd
  • ntpd установлен в локальный каталог, теперь есть две версии
  • Не удалось запустить локально построенный ntpd из сценария системной службы
  • почему NTPD постоянно пытается обновить?
  • collectd не может контролировать ntpd 4.2.8 (Ubuntu 16.04)
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.