如何获取以纪元格式显示的系统启动时间?

如何获取以纪元格式显示的系统启动时间?

我需要编写一个脚本来确定安装 RPM 后是否发生了重新启动。很容易获得安装 RPM 时的纪元时间:rpm -q --queryformat "%{INSTALLTIME}\n" glibc | head -1,它会生成如下所示的输出:1423807455

此交叉检查与rpm -q --info.

# date -d@`rpm -q --queryformat "%{INSTALLTIME}\n" glibc | head -1`
Fri Feb 13 01:04:15 EST 2015
# sudo rpm -q --info glibc | grep "Install Date" | head -1
Install Date: Fri 13 Feb 2015 01:04:15 AM EST      Build Host: x86-022.build.eng.bos.redhat.com

但我在尝试弄清楚如何从uptime或 从获取纪元时间时遇到了困难cat /proc/uptime。我不明白我的系统上的输出cat /proc/uptime如下所示:19496864.99 18606757.86。为什么有两个值?我应该使用哪个?为什么这些数字中有小数?

更新:谢谢techraf

这是我将使用的脚本...

#!/bin/sh

now=`date +'%s'`
rpm_install_date_epoch=`rpm -q --queryformat "%{INSTALLTIME}\n" glibc | head -1`
installed_seconds_ago=`expr $now - $rpm_install_date_epoch`
uptime_epoch=`cat /proc/uptime | cut -f1 -d'.'`

if [ $installed_seconds_ago -gt $uptime_epoch ]
then
        echo "no need to reboot"
else
        echo "need to reboot"
fi

如果您对剧本有任何反馈,我将不胜感激。

谢谢

答案1

作为 手册(乃至维基百科) 指出:

/proc/uptime

显示系统自上次重新启动以来已经运行了多长时间。

第一个数字是系统已启动的总秒数。第二个数字是机器空闲的时间(以秒为单位)。在多核系统(和某些 Linux 版本)上,第二个数字是每个 CPU 累积的空闲时间的总和。

小数点将秒与秒的小数部分分开。要使用此指标计算系统启动的时间点,您必须从当前时间(以纪元格式四舍五入)中减去系统已启动的秒数(第一个数字)。

例如Ruby中的启动时间戳(精确到100ms,受限于/proc/uptime):

`date +%s.%3N`.split[0].to_f - `cat /proc/uptime`.split[0].to_f

答案2

作为启动时间可以选择以秒和纪元打印其输出,您可以从中获取它。

在该行中,Current uptime:它报告实际的正常运行时间和系统启动的时间:

$ tuptime | grep 'Current uptime'
Current uptime:     59 minutes and 27 seconds   since   08:08:32 09/06/18

因此,使用-s秒和-ccsv 参数以及一些命令行管道:

$ tuptime -sc | grep 'Current uptime' | awk -F\" '{print $8}'
1528524512

相关内容