如何验证linux机器之间的时间差不大于5秒

如何验证linux机器之间的时间差不大于5秒

我如何验证所有机器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

答案1

用于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,而不仅仅是每年一次,那么无论如何,所有计算机都应该完美同步,并且大多数时候我们只是盲目地假设情况如此,甚至懒得去检查。

相关内容