Time
如何檢查NTPD是否使用shell成功更新機器時間?
我正在嘗試使用NTPD 將我的Linux 機器的時間更新到指定的NTP 伺服器。
這是場景:
每次 Linux 機器啟動時,我都想從 NTP 伺服器更新時間,如果不成功,我想每 5 分鐘重試一次,直到成功(最多 2 小時)。
我四處搜尋,發現我應該(?)使用 NTPD 並使用一些命令,例如:
#ntpdate ntp.server.com
(在開始 NTPD 之前)
#ntpd some_options_to_start
問題是:
- 我如何知道這些命令是否成功更新了時間?
- 我可以設置從 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