我正在尝试使用 NTPD 将我的 Linux 机器的时间更新到指定的 NTP 服务器。
这是场景:
每次 Linux 机器启动时,我想从 NTP 服务器更新时间,如果不成功,我想每 5 分钟再试一次,直到成功(最多 2 小时)。
我四处搜索,发现我应该(?)使用 NTPD 并使用一些命令,例如:
#ntpdate ntp.server.com
(在启动NTPD之前)
#ntpd some_options_to_start
问题是:
sleep
和循环的东西do
.. while
/ for
?)请注意,我想在 shell 脚本中执行上述命令,并将 shell 放在 Web 服务器中。然后客户端(使用 Web 浏览器浏览器)将在网站上执行脚本。所以我需要检查更新是否成功以将结果发送到客户端(通过网络)。
Bil*_*hor 23
使用脚本进行监控ntpd
并不常见。通常使用类似nagios
或的监视工具munin
来监视守护程序。该工具可以在出现问题时向您发送警报。munin
如果偏移量超过 15 毫秒,我会通过电子邮件发送给我。
通常,您应该使用奇数个服务器,以便守护进程可以在服务器关闭时在服务器之间进行选举。三个通常就足够了,超过五个就过分了。如果您对其进行监控,您内部网络上的客户端应该能够使用一台内部服务器。使用合法服务器或您的 ISP 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
Run Code Online (Sandbox Code Playgroud)
回答第一个问题,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
Run Code Online (Sandbox Code Playgroud)
NTP 守护进程ntpd
不断运行,并/etc/ntp.conf
每隔一段时间向 NTP 服务器(通常在 中配置)询问时间。您不必每 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>
Run Code Online (Sandbox Code Playgroud)
我认为您通常感兴趣的数字是“偏移量”,即您的本地时钟与服务器时钟相差的秒数。
作为“peers”命令的状态man
页面ntpdc
:
the current estimated delay, offset and dispersion of the peer, all in seconds.
Run Code Online (Sandbox Code Playgroud)
因此,很明显,“偏移”以秒为单位。
似乎ntpdc
已弃用,取而代之的是ntpq
. ntpq
有一个“peers”交互式命令,它以毫秒为单位给出“偏移量”。我的 Redhat 服务器有ntpdc
和ntpq
,所以你需要小心。
小智 8
使用 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
Run Code Online (Sandbox Code Playgroud)