我需要编写一个脚本来确定安装 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
秒和-c
csv 参数以及一些命令行管道:
$ tuptime -sc | grep 'Current uptime' | awk -F\" '{print $8}'
1528524512