두 서버 NTP의 ntp 상태를 확인하는 스크립트

두 서버 NTP의 ntp 상태를 확인하는 스크립트

우리는 서버 시계를 NTP 시간 서버와 동기화하고 싶습니다. 이 ntp 서버가 시간 초과되거나 아웃소싱된 시간 제한(소켓 시간 초과) 내에 응답하지 않는 경우 NTP 요청을 시간 서비스(파리: ntp-p1.obspm.fr)에 보내고 응답을 재개하는 스크립트(스크립트 bach)를 설계합니다. ) 예를 들어 15초 후에 두 번째 서버로 요청을 보냅니다(예: besenson: ntp-p1.obspm.fr). 그 사람도 응답하지 않으면 이메일을 통해 관리자에게 알리십시오.

답변1

이상적으로 NTP는 데몬으로 실행되어 하루 종일 여러 서버와 통신합니다. 이를 통해 평균화 및 통계 방법을 활용하여 이상값과 불량 서버를 식별할 수 있습니다. NTP가 이 모드에서 실행 중인 경우 해당 피어에 대한 자세한 정보를 이미 유지 관리하고 있습니다. 다음을 실행하여 이 데이터를 볼 수 있습니다.

$ ntpq -c associations
ind assid status  conf reach auth condition  last_event cnt
===========================================================
  1 27930  962a   yes   yes  none  sys.peer    sys_peer  2
  2 27931  941d   yes   yes  none candidate              1
$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntpserver       .GPS.            1 u  553 1024  377    0.169    0.300   0.223
+ntpserver2      10.41.200.62     2 u  193 1024  377    0.493    0.307   0.168

마지막 두 줄의 첫 번째 문자는 "카운트 코드"라고 하며 특히 관심을 가질 수 있습니다. 여기에 ""가 표시되면 피어가 사용되지 않는다는 의미입니다. 액세스할 수 없거나 사용을 방해하는 또 다른 심각한 문제가 있기 때문입니다. 보다ntpq 매뉴얼 페이지더 알아보기. 다음과 같이 모니터링에 연결할 수 있습니다.

#!/bin/bash
output=`ntpq -p | tail -n +3 | cut -d' ' -f1`

for line in $output; do
  tallycode=${line:0:1}
  host=${line:1}
  if [[ "$tallycode" == [#+\*] ]]; then
    echo "Info: Found good NTP peer $host"
    exit 0
  else
    echo "Warning: bad NTP peer $host"
  fi
done
echo "Error: None of the peers provides useful time!"
exit -1

각 서버에 대해 어리석은 단일 테스트를 수행하려는 경우 해당 출력을 구문 분석할 수 있습니다 sntp -t 15 <servername>. 그러나 위의 접근 방식은 더욱 강력해야 합니다.

관련 정보