我们希望将我们的服务器时钟与 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>
。但上述方法应该更加稳健。