為什麼 ntpd 不更新我伺服器上的時間?
我的伺服器上正在執行 ntpd。這是所有預設設置,除了我註釋掉它成為其他機器的伺服器的能力:
# restrict -4 default kod notrap nomodify nopeer noquery # restrict -6 default kod notrap nomodify nopeer noquery restrict default ignore
如果我跑步
ntpdate -q ntp.ubuntu.com
,我會被告知我的機器時鐘延遲了 7 秒。這是怎麼回事?我如何診斷正在發生的事情,是否有可以打開的日誌?
更多資訊#1
# ntpq -np remote refid st t when poll reach delay offset jitter ============================================================================== 91.189.94.4 193.79.237.14 2 u 30 64 7 108.518 -0.136 0.361
更多資訊#2
這是我問這個問題時的樣子:
# ntpdate -q ntp.ubuntu.com server 91.189.94.4, stratum 2, offset 7.191308, delay 0.13310 10 Jan 20:38:09 ntpdate[31055]: step time server 91.189.94.4 offset 7.191308 sec
這是它現在的樣子,在重新啟動 ntpd 幾次之後(我假設這就是修復它的原因):
# ntpdate -q ntp.ubuntu.com server 91.189.94.4, stratum 2, offset 0.000112, delay 0.13164 10 Jan 20:47:03 ntpdate[31419]: adjust time server 91.189.94.4 offset 0.000112 sec
更多資訊#3
我解除安裝了 ntp 並安裝了 openntpd 並執行了
/usr/sbin/ntpd -d
,我看到這樣的輸出:reply from 64.73.32.134: offset 6.715003 delay 0.041152, next query 30s reply from 208.53.158.34: offset 6.700224 delay 0.036263, next query 31s adjusting local clock by 6.734120s reply from 72.18.205.156: offset 6.708575 delay 0.035885, next query 30s reply from 64.73.32.134: offset 6.701463 delay 0.044199, next query 33s
這對我來說非常清楚地表明我無法在我的伺服器上設置時間(儘管使用正常 ntp,它似乎有時會更新……)。
更多資訊#4
我的 VPS 提供商說:
最新的核心不應將您的系統鎖定到我們 dom0 的時鐘,為了安全起見,您可以在 sysctl.conf 中設置 xen.independent_wallclock = 1。
我想這仍然沒有解決 VPS 需要可用 CPU 才能進行正確的時序計算的問題。
好吧,伙計們,自從提出這個問題以來,我已經使用預設供應商(Ubuntu 10.0.4)配置重新安裝了 ntp 並讓它執行了幾天。在撰寫本文時,
ntpdate -q ntp.ubuntu.com
表明我的時間精確到 0.000216 秒以內。所以,我遇到的問題一定是我的自定義配置(我試圖讓外部主機無法查詢我的伺服器,我已經在用我的防火牆做這件事,所以我不太擔心)。這是 Ubuntu 10.0.4 ntp.conf 的完整內容,已刪除註釋:driftfile /var/lib/ntp/ntp.drift statistics loopstats peerstats clockstats filegen loopstats file loopstats type day enable filegen peerstats file peerstats type day enable filegen clockstats file clockstats type day enable server ntp.ubuntu.com restrict -4 default kod notrap nomodify nopeer noquery restrict -6 default kod notrap nomodify nopeer noquery restrict 127.0.0.1 restrict ::1
我歡迎有關如何改進此配置的回饋。
我還向我的 VPS 提供商開了一張票,要求他們詳細推薦最佳做法。我將他們指向這個執行緒,以及一些其他文件表明 CPU 分配可能會導致計時問題。他們是這樣說的:
最新的核心不應將您的系統鎖定到我們 dom0 的時鐘,為了安全起見,您可以在 sysctl.conf 中設置 xen.independent_wallclock = 1。這將確保伺服器實例不遵循主機伺服器上的時鐘。
和:
我認為您可能誤解了此問題在虛擬化環境中影響 NTP 客戶端的確切程度。根據我在 Xen 主機上的虛擬化系統(例如我們在 Rackspace Cloud 上的設置)的經驗,即使在高負載系統上,由於沒有專用系統時鐘來處理中斷,所繼承的不准確性也只有幾分之一秒。這種輕微的不准確性很容易被 NTP 管理,即使它只設置為每天更新一次伺服器時間(或者甚至比這更不頻繁)。
您可以通過將其添加到 ntp.conf 來啟用登錄 ntpd:
logfile /var/log/ntpd.log
來源:ntp手冊
如果關閉ntpd,可以通過命令行更新時鐘嗎?如果您執行 ntpdate 命令並收到如下錯誤:
# ntpdate ntp.ubuntu.com 10 Jan 23:47:57 ntpdate[26284]: Can't adjust the time of day: Operation not permitted
這意味著您可能在 VPS 上,在這種情況下您不能修改系統時鐘 - 這只能在主機上完成。