我当时正在进行 24 小时编程马拉松,不得不多次重新启动,并且想知道是否有一种方法可以准确地告知计算机重新启动或崩溃的次数。
答案1
系统重新启动通常记录在二进制文件中/var/log/wtmp
。读取该文件的最简单方法是使用last
每次重新启动时打印如下行的命令:
reboot system boot 3.10-3-amd64 Fri May 2 19:30 - 21:02 (5+01:32)
因此,如果您发出last reboot
,您将获得记录到文件中的所有重新启动的列表wtmp
。
答案2
可以直接调用
last reboot
每次系统重新启动时,伪用户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"
注意:重新启动后,您几乎不会遇到任何问题,因为每次重新启动时都会出现一行。
此崩溃计数仅供参考:您可以有很多行(例如,每个 shell 各一行),以防发生崩溃。更重要的是,如果崩溃不是突然的,您可以为同一崩溃设置不同的时间(如果在边界内,则可能是一秒或一分钟)。此外,即使这种情况比较罕见,您也可以使 shell 崩溃而不会导致系统崩溃。排序选项尝试同时删除重复的行。为了获得正确的结果,您应该仅将重启之间没有崩溃的行算作重新启动,并将之前发生过崩溃的重新启动视为崩溃。
答案3
易于了解启动时间, 让我举一个例子:
Tuptime 跟踪系统的关闭/启动行为,此外,它还允许过滤自给定时间戳以来的报告。
那么,由于最后 24 小时是 86400 秒,以秒为负数并以 date 命令为参考的执行行将是:
$ date && tuptime --tsince -86400
dom ene 7 10:13:06 CET 2018
System startups: 3 since 10:13:06 06/01/18
System shutdowns: 2 ok - 0 bad
System uptime: 3.42 % - 49 minutes and 16 seconds
System downtime: 96.58 % - 23 hours, 10 minutes and 44 seconds
System life: 1 day, 0 hours, 0 minutes and 0 seconds
...
另一个有趣的输出是传递表选项:
$ tuptime --tsince -86400 -t
No. Startup Date Uptime Shutdown Date End Downtime
78 OK 3 hours, 23 minutes and 11 seconds
79 13:51:57 06/01/18 10 minutes and 54 seconds 14:02:51 06/01/18 OK 19 hours, 31 minutes and 53 seconds
80 09:34:44 07/01/18 54 minutes and 2 seconds
答案4
我制作了一个简单的 shell 脚本,它将显示我们的系统每天重新启动的次数。
#!/bin/bash
day=$(date | awk {'print $1 " " $3 " " $2'})
echo $day
reboot_times=$(last reboot | grep "$day" | wc -l)
echo $reboot_times times rebooted
输出
星期三
重启2次