Linux

自動時間同步:ntpdate 有效,但 chrony 無效

  • February 17, 2022

我的 Linux 伺服器的時間同步有問題。這台機器和 NTP 伺服器都位於(較小的)大學數據中心,因此是本地地址。

奇怪的是該ntpdate命令有效:

ntpdate -u 172.16.0.25

輸出:

17 Jan 15:03:53 ntpdate[25993]: adjust time server 172.16.0.25 offset 0.036043 sec

但是,chronyd沒有(它只是掛起):

chronyd -q 'server 172.16.0.25 iburst'

我正在嘗試所有方法來設置自動時間同步,ntpd但沒有成功,最後求助於chrony但仍然無法弄清楚。

這是發生了什麼事ntpd。我使用https://vitux.com/how-to-setup-ntp-server-and-client-on-debian-10ntpdate上的說明進行安裝。conf文件有一個命令

server 172.16.0.25 prefer iburst

而係統狀態ntp報告

Jan 18 10:26:11 akulab1 ntpd[26957]: kernel reports active service TIME_ERROR: 0x41: Clock Unsynchronized

具有以下ntpq -p輸出

HKS-SRV01.unica .LOCL.           1 u    9   64   15    0.557  2275.65   9.515 – 

但是,一段時間後,服務報告

Jan 18 10:31:01 akulab1 ntpd[26957]: ntpd exiting on signal 15 (Terminated)

因為 NTP 同步沒有成功。但是, ntpdate -u 172.16.0.25 報告同步:18 Jan 10:33:13 ntpdate

$$ 26990 $$: step time server 172.16.0.25 offset 2.282101 sec (如果我沒記錯的話…) – ksonofre 7 分鐘前 這是我的/etc/ntp.conf文件:

driftfile /var/lib/ntp/ntp.drift

leapfile /usr/share/zoneinfo/leap-seconds.list

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 172.16.0.25 prefer iburst

restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited

restrict 127.0.0.1
restrict ::1

restrict source notrap nomodify noquery

我再次重新啟動了 NTP 服務:systemctl restart ntp

的輸出ntpq -np如下:

root@akulab1:~# ntpq -np
    remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
172.16.0.25     .LOCL.           1 u   63   64  377    0.518  104.685  14.815

但是,服務 ( systemctl status ntp) 仍然報告:

Jan 18 11:04:10 akulab1 ntpd[27089]: kernel reports TIME_ERROR: 0x4041: Clock Unsynchronized

而且,在我設置timedatectl set-ntp trueNTP 服務後,它會簡單地關閉,即報告不活動。

我再次重新啟動了 ntpd 服務並且它處於活動狀態。此外,我已經等了一個多小時進行同步,但它從來沒有得到它(伺服器地址前面沒有星號或加號) - 這是輸出ntpq -np

    remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
172.16.0.25     .LOCL.           1 u   61   64  377    0.588  269.847  14.797

此外,這是ntpdate -qu命令的輸出:

18 Jan 13:57:44 ntpdate[1975]: no servers can be used, exiting

好的,上面的命令不完整,所以ntpdate -qu 172.16.0.25有以下輸出:

server 172.16.0.25, stratum 1, offset 0.435131, delay 0.02621
18 Jan 14:51:56 ntpdate[6951]: adjust time server 172.16.0.25 offset 0.435131 sec

ntpq -np給出以下內容:

    remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
172.16.0.25     .LOCL.           1 u   17   64  377    0.554  436.092  14.279

解決方案在下面接受的答案中給出。我假設時間同步現在正在工作,但我仍然會跟踪時鐘漂移並更新我的問題,如果它沒有正確同步。


最終解決方案發佈在這篇文章中:ntp server reachable but never select/set the time

你的時鐘幾乎肯定是同步的。“時鐘未同步”具有誤導性,因為它僅在ntpd等待與其上游源同步時適用。

NTP 有兩條路由:systemd一條(通過 管理timedatectl)和ntpd一條(通過 監控ntpq)。我建議你timedatectl一個人離開。

systemctl start ntp    # don't restart ntpd if it was already running
watch -n1 ntpq -pn     # while :; do clear; date; echo; ntpq -pn; sleep 1; done

您應該會看到列出的上游,最初的可達性為 0,在大約五分鐘的時間內奇怪地增加到 377。它應該+在左側列中顯示它是時間同步的候選者,並更改為*最終被接受的時間。

延遲和偏移欄位以毫秒為單位。在你的大學 WAN 中,我希望延遲很低,500ns 非常好。在數小時和數天內,偏移量應趨於零。

這是我的伺服器中一個穩定範例的摘錄。37ms 的延遲對於 xDSL 線路來說是合理的。來自上行伺服器的偏移量非常低,並且抖動是可以忍受的:

    remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*51.155.16.62    .GPS.            1 u   10   64  377   37.420    0.524  34.067

sysinfo您可以使用 NTP 的命令查看同步狀態。在這裡,我們正在查看第一行輸出;注意sync_ntp,它的存在確認我的客戶端與上游伺服器同步:

ntpq -c sysinfo | head -n1
associd=0 status=0618 leap_none, sync_ntp, 1 event, no_sys_peer,

最後的警告。當您有服務試圖保持時間正確時,不要更改本地系統的時間,這一點很*重要。*該服務會注意到時間的變化,並假設本地時鐘不能保持正確的時間。然後它會非常努力地糾正時鐘,最終可能會導致它嚴重擺動,本地時鐘無法再與上游同步。請參閱NTPD 多久(以及何時)更新時間?

如果發生這種情況,您將需要等待(很長時間)讓 NTP 注意到或自行修復。您可以通過禁用和停止 ntpd ( systemctl stop ntp; systemctl disable ntp) 自行修復它,然後刪除/etc/adjtime並立即重新啟動。(您可能需要兩次執行此刪除/重新啟動步驟。)然後使用ntpdate -u 51.155.16.62正確設置時間並再次重新啟動。最後,重新啟用 NTP ( systemctl enable ntp; systemctl start ntp)。

如果您已ntpdate安裝,您可以使用ntpdate -qu {server}. 請勿在ntpd執行時嘗試設置時間。

其他參考資料

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