time - 我如何知道 SLES11 系统上的系统启动时间?
问题描述
我正在尝试计算在 SUSE linux 系统(SLES11 和 SLES12 系统)上重新启动所花费的时间,如下所示:
reboot_time = end_time - start_time
where
start_time is "time at which reboot command is triggered"
end_time is "time at which system is ready after booting process, finishing up startup and userspace programs" OR "time when login is prompted soon after reboot"
我能够知道start_time
。但无法知道end_time
SLES11 系统(init.d SysV 版本)的时间。对于 SLES12(systemd 初始化),systemd-analyze
提供了所需的信息,但我无法为 init.d 系统找到可靠的方法。在 SysV 初始化系统或 SLES11 上是否有任何类似的替代方案可以让我花费在引导上的时间(启动内核、完成运行启动程序和完成用户空间初始化)?
解决方案
您可能会使用以下命令获得(非秒精确)上次关闭日期
last -x | egrep "shutdown|reboot" | head -1 | awk '{print $5" "$7" "$6" "$8}'
last -x
可以为您提供系统启动/重新启动和关闭时间,以及自系统创建以来的所有系统启动日志。问题是它不显示年份,并且只有微小的分辨率。
last
读取各种日志二进制日志文件(/var/log/wtmp utmp 和 btmp)您可以使用utmpdump
实用程序获取具有更精确时间戳的关机和重启时间戳
utmpdump /var/log/wtmp | egrep "shutdown|reboot" | awk -F '[' '{print $9}' | sed 's/ ]//g'
最终,您可以使用以下(非常长的)一个衬垫来获取从关机到重新启动所经过的时间:
echo "System $(hostname) took $(($(date -d "$(LC_ALL=C utmpdump /var/log/wtmp 2>/dev/null| grep "reboot" | grep -Eo '[[:alpha:]]{3} [[:alpha:]]{3} [[:digit:]]{2} [[:digit:]]{2}:[[:digit:]]{2}:[[:digit:]]{2} [[:digit:]]{4}|[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}T[[:digit:]]{2}:[[:digit:]]{2}:[[:digit:]]{2}' | tail -1)" "+%s") - $(date -d "$(LC_ALL=C utmpdump /var/log/wtmp 2>/dev/null| grep "shutdown" | grep -Eo '[[:alpha:]]{3} [[:alpha:]]{3} [[:digit:]]{2} [[:digit:]]{2}:[[:digit:]]{2}:[[:digit:]]{2} [[:digit:]]{4}|[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}T[[:digit:]]{2}:[[:digit:]]{2}:[[:digit:]]{2}' | tail -1)" "+%s"))) to reboot"
解释:
LC_ALL=C
使以下命令的输出未本地化utmpdump /var/log/wtmp 2>/dev/null
将列出所有事件,同时2>/dev/null
将重定向错误和不需要的输出。grep "reboot"
或grep "shutdown"
将过滤 utmpdump 输出以仅显示重新启动或关闭事件'[[:alpha:]]{3} [[:alpha:]]{3} [[:digit:]]{2} [[:digit:]]{2}:[[:digit:]]{2}:[[:digit:]]{2} [[:digit:]]{4}'
是一个正则表达式,用于捕获看起来像“Fri Aug 02 00:01:27 2019”的非本地化日期字符串,这些在 CentOS 上使用'[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}T[[:digit:]]{2}:[[:digit:]]{2}:[[:digit:]]{2}'
是一个正则表达式,用于捕获看起来像“2021-08-17T10:11:03”的 ISO 8601 日期字符串,这些用于 Debiandate -d "datestring"
将日期转换为纪元$(command)
是命令的输出$((x - y))
用于数学运算(例如减去两个时期)
您还可以使用 的输出utmpdump
来检索登录时间戳。请注意,关机/重启周期与关机/系统启动周期不同,因此必须根据您的使用情况调整命令。另请注意,任何强制系统重置都不会包含在日志中,因此会提供虚假值。
推荐阅读
- sql-server - qt到sql服务器连接
- r - 覆盖多个参数,更快的方法
- css - Angular Material - 拒绝应用样式
- c - 计算树和图来模拟 ND 图灵机
- asp.net-core-mvc - 在 windows 上开发 .net core 并在 linux 的 azure app 服务上部署
- android - 未解决的参考 NotificationCompat 即使在添加支持库之后
- jenkins - 与 Blue Ocean、Github 和 Nuget 的持续集成导致路径太长
- ios - 如何隐藏除地图应用程序以外的所有应用程序?
- javascript - 开发替换文本的 vscode 扩展
- javascript - 在数据表中删除没有数据的子行