uptime -s 改变报告的时间

uptime -s 改变报告的时间

我有一个依赖于 Ubuntu 18.04 启动时间的脚本:

uptime -s

运行脚本时,我会将该值保存在文件中。我注意到当我启动 Ubuntu 时,时间是:

uptime -s
2019-01-07 18:01:59

运行两个多小时后,相同的命令现在报告了不同的时间(我一直登录同一个帐户):

uptime -s
2019-01-07 18:01:58

我期望该命令在同一登录会话中报告相同的时间。但不知何故,时间以 1 秒为单位变化(现在更早了)。

这是操作系统还是工具问题?

https://elixir.bootlin.com/linux/latest/source/fs/proc/uptime.c
struct timespec64 uptime;
ktime_get_boottime_ts64(&uptime);

如何才能使系统启动时间不受这种波动的影响?

更新:

我以为我找到了答案:Linux:获取系统启动的日期和时间

但我错了,这只是运气而已,在运行了更多测试之后,可以看出这是操作系统的问题,时间在 58 和 59 之间旋转,具体取决于纳秒:

$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.670091767
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.627339874
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.708332394
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.821526069
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.604129974
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.469767199
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:59.264900963
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.986611962
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.851955874
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:58.958194732
$ date -d "`cut -f1 -d. /proc/uptime` seconds ago" +"%F %T.%N"
2019-01-07 18:01:59.066728481

我看,没有可靠的系统正常运行时间达到秒级。

答案1

在这里找到答案:

Linux:获取系统启动的日期和时间

与 uptime -s 不同,此命令似乎给出了正确的结果

 date -d "`cut -f1 -d. /proc/uptime` seconds ago"

例子:

date -d "`cut -f1 -d. /proc/uptime` seconds ago"
Mo 7. Jan 18:01:59 CET 2019

看来 uptime -s 并不可靠。

相关内容