首页 > 解决方案 > 我如何知道 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_timeSLES11 系统(init.d SysV 版本)的时间。对于 SLES12(systemd 初始化),systemd-analyze提供了所需的信息,但我无法为 init.d 系统找到可靠的方法。在 SysV 初始化系统或 SLES11 上是否有任何类似的替代方案可以让我花费在引导上的时间(启动内核、完成运行启动程序和完成用户空间初始化)?

标签: timeopensuserebootsusesles

解决方案


您可能会使用以下命令获得(非秒精确)上次关闭日期

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 日期字符串,这些用于 Debian
  • date -d "datestring"将日期转换为纪元
  • $(command)是命令的输出
  • $((x - y))用于数学运算(例如减去两个时期)

您还可以使用 的输出utmpdump来检索登录时间戳。请注意,关机/重启周期与关机/系统启动周期不同,因此必须根据您的使用情况调整命令。另请注意,任何强制系统重置都不会包含在日志中,因此会提供虚假值。


推荐阅读