【问题标题】:Time collection/ calculation of remote hosts远程主机的时间收集/计算
【发布时间】:2014-01-13 00:46:36
【问题描述】:

我必须在特定主机 (HOST A) 上运行一些报告。在此主机(HOST A)上运行的命令可以从远程服务器收集一些信息,但不能收集这些远程主机的“当前”服务器时间。另外,我无权远程连接到主机或使用来自 HOST A 的 ssh 或 rsh(rsh 日期)收集时间。

所以,我提出两个问题:-

  1. 有没有办法通过不使用 ssh/rsh 来查找远程主机的“当前”服务器时间。

  2. 谁能帮我制作一个基于 GMT 时间设置的时间计算脚本。 (我可以通过date -u 收集主机 A 上的 GMT 时间,并根据 GMT 时间和远程主机的时区计算远程主机上的大致时间。环境中的所有主机都使用同步的 NTP 服务器进行更新)

我在 Solaris 10(首选)/RHEL 6 上使用 BASH

提前致谢!

【问题讨论】:

  • 如果一切都与 NTP 正确同步,那么 GMT (UTC) + timezone 就足够了吗?
  • @Oli Charlesworth,是的……但是如何计算呢?
  • 哦,您的问题并不清楚您知道远程主机的时区!
  • 仍然不确定服务器时间是什么意思?内核以 UTC 度量。登录的用户可能在他的语言环境中设置了任何时区,因此时区“仅仅是”一个显示属性。 root 用户当然可以被认为是特殊的?您是否在特殊用户的时区之后?
  • 我知道每个远程主机的时区。那么如何根据 GMT +/- 偏移量计算远程主机的大约“当前”时间?例如:如果 GMT 在主机 A 上显示为 Tue Dec 24 21:23:43 GMT 2013,则位于巴黎的远程主机的“当前”时间将为 Tue Dec 24 22:23:43 GMT 2013(大约)。那么如何在主机 A 上为我的每个远程主机计算类似的东西呢?

标签: bash date gmt


【解决方案1】:

你想要类似的东西

getZoneOffset() {
  #assume ./zones.txt contains lines like
  #example.com 3600
  #i.e. host and time offset in seconds
  remote=$1
  set - $(grep "$1" ./zones.txt)
  echo $2
}

zoneOffsetSecs=$(getZoneOffset $remote)
now=$(date -u +%s)
there=$((now+zoneOffsetSecs))
date -d @$there

如果您的远程主机不在您的 zone.txt 文件中,您可能需要添加错误处理。

【讨论】:

  • 我不知道“getZoneOffset”方法。是用于时间转换的某些操作系统功能吗?如果您能详细说明一下,那将会很有帮助。同时,我正在尝试进行一些计算,将 GMT 时间转换为秒,添加偏移量并使用 date -d 输出它。不过我也在等你的回复。
  • 不,这只是您需要实现的占位符。那是我的问题,你是否可以自己做。基本上,您需要几秒钟内从主机名到区域偏移的映射。 bash 中的地图有点麻烦,所以我建议使用一个包含区域和偏移量的简单文件。我会更新答案。
  • 感谢您提供详细信息,我也发布了答案,请检查并提出任何改进建议......顺便说一句,我喜欢将偏移量保持为“秒”而不是“HH”的想法: MM',让添加更简单!
  • date -u +%s 中的某些内容无法正常工作。测试结果 bash-4.1$ nowgmt=$(date -u +%s) bash-4.1$ nowtm=$(date +%s) bash-4.1$ echo $nowgmt 1387925059 bash-4.1$ echo $nowtm 1387925072 bash-4.1$日期-d @$nowgmt 2013 年 12 月 25 日星期三 09:44:19 EST bash-4.1$ 日期 -d @$nowtm 2013 年 12 月 25 日星期三 09:44:32 bash-4.1$ bash-4.1$ 日期 12 月 25 日星期三 09: 2013 年美国东部标准时间 45:09 bash-4.1$ 日期 -u 2013 年 12 月 24 日星期二 22:45:13 UTC
【解决方案2】:

我已经使用下面的方法达到了结果,到目前为止看起来还不错,但欢迎提出建议

bash-4.1$ nowgmt=`date -u|awk '{print $4}'|awk -F: '{print ($1 * 3600) + ($2 * 60) + 50400}'`
bash-4.1$ tzoffset="10:30"
bash-4.1$ offsettime=`echo $tzoffset | awk -F: '{print ($1 * 3600) + ($2 * 60)}'`
bash-4.1$ thertime=$((nowgmt + offsettime))
bash-4.1$ date -d @$thertime | awk '{print $4}'
08:46:00
bash-4.1$ date -d @$thertime | awk '{print $4}' | cut -d ":" -f1-2
08:46

【讨论】:

    猜你喜欢
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多