检查两个服务器 NTP 的 ntp 状态的脚本

检查两个服务器 NTP 的 ntp 状态的脚本

我们希望将我们的服务器时钟与 NTP 时间服务器同步。设计一个脚本,将 NTP 请求发送到时间服务(巴黎:ntp-p1.obspm.fr)并恢复响应(脚本 bach),如果此 ntp 服务器没有响应超时或在外包的时间限制内没有响应(套接字超时)例如 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>。但上述方法应该更加稳健。

相关内容