有没有办法知道我的计算机在 24 小时内重新启动了多少次?

Ale*_*lex 5 logs crash reboot

我正在做一个 24 小时的代码马拉松,不得不重新启动无数次,想知道是否有办法确切地知道有多少计算机重新启动或崩溃。

mre*_*hub 13

系统重启通常记录在二进制文件中/var/log/wtmp。读取该文件的最简单方法是使用该last命令,该命令在每次重新启动时打印如下行:

reboot   system boot  3.10-3-amd64     Fri May  2 19:30 - 21:02 (5+01:32)   
Run Code Online (Sandbox Code Playgroud)

因此,如果您发出last reboot,您将获得记录到wtmp文件中的所有重新启动的列表。


Has*_*tur 9

可以直接调用

 last reboot
Run Code Online (Sandbox Code Playgroud)

每次系统重新启动时,伪用户reboot 都会登录。因此,上次重新启动将显示自创建日志文件以来所有重新启动的日志。

它另外给出了开始日志文件的时间 ( /var/log/wtmp)。如果您也对过去感兴趣,通常会存储一个或多个包含过去日志的文件 ( /var/log/wtmp.1)...


下面是一个小示例脚本,用于计算一天内重新启动和崩溃的次数。
您可以运行它以/bin/bash Myscript.sh获得今天的结果或/bin/bash Myscript.sh "Tue May 20"5 月 20 日的结果

#!/bin/bash

Today=`date`
StrDay=${1:-${Today:0:10}}

N_Crash=`last -F  |grep crash  |  grep "$StrDay"  | sort -k 7 -u | wc -l`
N_Reboot=`last -F | grep reboot | grep "$StrDay"  | wc -l `

echo "# Today $Today  Report for crash and reboot on $StrDay  "
echo "# Crashes $N_Crash"
echo "# Reboot $N_Reboot"
Run Code Online (Sandbox Code Playgroud)

注意:重新启动时您几乎没有问题,因为每次重新启动时都会有一行。
这个崩溃计数只是指示性的:在崩溃的情况下,您可以有很多行(例如,每个 shell 一行)。更重要的是,如果崩溃不是突然的,您可以为同一个崩溃设置不同的时间(如果它在边界内,可能是一秒或一分钟)。此外,即使这种情况更为罕见,您也可以使 shell 崩溃而不会导致系统崩溃。sort 选项尝试同时删除重复的行。要获得正确的结果,您应该仅将重新启动的行数计为重新启动,而不会在之前崩溃的情况下将重新启动计为崩溃。