저는 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
시스템이 재부팅될 때마다 의사 사용자 재부팅이 로그인됩니다. 따라서 마지막 다시 시작에는 로그 파일이 생성된 이후 모든 다시 시작에 대한 로그가 표시됩니다.
또한 로그 파일이 시작된 시간( /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"
참고: 다시 시작한 후에는 다시 시작할 때마다 선이 나타나기 때문에 문제가 거의 발생하지 않습니다.
이 충돌 수는 참조용일 뿐입니다. 충돌이 발생할 경우 여러 줄(예: 각 셸당 하나씩)을 사용할 수 있습니다. 또한 충돌이 갑작스럽지 않은 경우 동일한 충돌에 대해 다른 시간을 설정할 수 있습니다(범위 내에 있는 경우 1초 또는 1분 정도). 또한 이것이 드물게 발생하더라도 시스템을 충돌시키지 않고 셸을 충돌시킬 수 있습니다. 정렬 옵션은 중복된 행을 동시에 제거하려고 시도합니다. 올바른 결과를 얻으려면 다시 시작 사이에 충돌이 발생하지 않은 다시 시작 행으로만 계산하고 이전에 충돌이 발생한 다시 시작을 충돌로 계산해야 합니다.
답변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
하루에 시스템이 재부팅되는 횟수를 표시하는 간단한 쉘 스크립트를 만들었습니다.
#!/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번 재부팅