Linux

如何驗證linux機器之間的差異時間不大於5秒

  • April 22, 2018

如何驗證所有機器appolo01-mars3彼此之間的偏移小於 5 秒?

ssh appolo01 date ; ssh appolo02 date ; ssh appolo03 date ; ssh mars1 date ; ssh mars2 date ; ssh mars3 date


Sun Apr 22 09:05:39 UTC 2018
Sun Apr 22 09:05:40 UTC 2018
Sun Apr 22 09:05:40 UTC 2018
Sun Apr 22 09:05:40 UTC 2018
Sun Apr 22 09:05:40 UTC 2018
Sun Apr 22 09:05:48 UTC 2018

用於date +%s獲取 UNIX 時間戳,例如1524388823. 與依賴於語言環境的、人類可讀的日期不同,這可以在腳本中更容易地進行比較。

在時間正確同步的機器上,這樣的事情應該可以工作:

a=$(date +%s)
b=$(ssh user@remote date +%s)
c=$(date +%s)

if [ $a -le $b  -a  $b -le $c ]
then
   echo Seems to be OK.
fi
  • (a)是 SSH 之前的本地時間,
  • (b)是遙遠的時間,
  • (c)是 SSH 之後的本地時間。

如果(a <= b <= c)可以合理安全地假設時間是同步的。這根本沒有考慮到網路延遲——檢查 delta(a,c) ——但它仍然應該是合理的。假設 SSH 不會要求輸入密碼和/或您不會花一整天時間提供密碼。

如果您仍想為此添加 5 秒的邊距,請使用 a-5 和 c+5。當然,這在任一方向都允許 5 秒 - 並且不符合所有機器的 5 秒視窗條件。但除非你真的像主機名所暗示的那樣執行深空任務,否則沒有理由首先接受如此巨大的時間差異。

如果您經常使用 NTP,而不僅僅是每年一次,那麼無論如何,所有機器都應該完美同步,而且大多數時候我們只是盲目地假設是這種情況,甚至懶得去檢查。

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