Time

如何檢查NTPD是否使用shell成功更新機器時間?

  • November 18, 2016

我正在嘗試使用NTPD 將我的Linux 機器的時間更新到指定的NTP 伺服器。

這是場景:

每次 Linux 機器啟動時,我都想從 NTP 伺服器更新時間,如果不成功,我想每 5 分鐘重試一次,直到成功(最多 2 小時)。

我四處搜尋,發現我應該(?)使用 NTPD 並使用一些命令,例如:

#ntpdate ntp.server.com(在開始 NTPD 之前)

#ntpd some_options_to_start

問題是:

  1. 我如何知道這些命令是否成功更新了時間?
  2. 我可以設置從 ntpd 更新時間的間隔嗎?(或者我必須在 shell中使用sleep和循環do.. while/之類的東西?)for

請注意,我想在 shell 腳本中執行上述命令,並將 shell 放在 Web 伺服器中。然後客戶端(使用網路瀏覽器瀏覽器)將在網站上執行腳本。所以我需要檢查更新是否成功或不將結果發送給客戶端(通過網路)。

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

引用自:https://unix.stackexchange.com/questions/18642