【发布时间】:2022-10-17 06:03:46
【问题描述】:
我需要添加所有远程服务器的时间戳作为输出的一部分,并检查和比较时间戳是否相同,
我可以打印机器 IP 和日期。
#!/bin/bash
all_ip=(192.168.1.121 192.168.1.122 192.168.1.123)
for ip_addr in "${all_ip[@]}"; do
aws_ip=$"ip route get 1 | sed -n 's/^.*src \([0-9.]*\) .*$/\1/p'"
date=date
sshpass -p "password" ssh root@$ip_addr "$aws_ip & $date"
echo "==================================================="
done
获取输出为:
Wed 27 Jul 2022 05:48:15 AM PDT 192.168.1.121 =================================================== Wed Jul 27 05:48:15 PDT 2022 192.168.1.122 =================================================== Wed Jul 27 05:48:15 PDT 2022 192.168.1.123 ===================================================如何检查时间戳(忽略秒) 所有机器是否相同,
例如:(2022 年 7 月 27 日星期三 05:48:15 || 2022 年 7 月 27 日星期三 05:48:15 || 2022 年 7 月 27 日星期三 05:48:15)
预期输出:
|| Time are in sync on all machines || # if in sync || Time are not in sync on all machines || # if not sync Wed 27 Jul 2022 05:48:15 AM PDT 192.168.1.121 =================================================== Wed Jul 27 05:48:15 PDT 2022 192.168.1.122 =================================================== Wed Jul 27 05:48:15 PDT 2022 192.168.1.123 ===================================================
【问题讨论】:
-
我建议为日期输出选择更容易比较的不同格式,例如
date +%s(自 1970-01-01 00:00:00 UTC 以来的秒数)。您还应该考虑到date命令可能不会在完全相同的时间运行,这可能会产生微小的差异。当您有超过 2 台机器时,“所有机器上的日期/时间不同”的说法与“所有机器上的日期/时间不同”的说法并不完全相同。 -
您使用的是 ntp 还是 chrony 或其他什么?您的所有机器是否都同步到相同的时间服务器?
-
@jhnc 使用 crontab 进行日期时间同步 date --set="" 通过 ansible 设置时间
-
@rowoc 不,我不能。我不知道谁否决了这个问题。忽略秒是不够的。甚至年份也可以在一毫秒内改变。该命令可能在 2022 年 12 月 31 日 23:59:59(和 999 毫秒)在一台机器上和 2023 年 1 月 1 日 00:00:00(和 1 毫秒)在另一台机器上执行。这就是为什么我建议比较
date +%s的输出。您可以检查最大值和最小值之间的差异是否高于一个小限制。 -
这里的目标是证明你的机器都有相同的时间,如果它们不是你可以调整它们吗?如果是这样,请考虑设置一个 cron 作业以与 NTP 服务器同步,然后您就不必考虑它了。
标签: bash