Я занимался 24-часовым программированием, мне приходилось много раз перезагружаться, и мне было интересно, есть ли способ точно определить, сколько компьютеров было перезагружено или вышло из строя.
Я занимался 24-часовым программированием, мне приходилось много раз перезагружаться, и мне было интересно, есть ли способ точно определить, сколько компьютеров было перезагружено или вышло из строя.
Ответы:
Перезагрузки системы обычно регистрируются в двоичном файле /var/log/wtmp
. Самый простой способ прочитать этот файл - использовать last
команду, которая печатает такие строки для каждой перезагрузки:
reboot system boot 3.10-3-amd64 Fri May 2 19:30 - 21:02 (5+01:32)
поэтому, если вы выдадите запрос last reboot
, вы получите список всех перезагрузок, зарегистрированных в вашем wtmp
файле.
last reboot
отображает записи от "пользователя" reboot
.
last
man-страницы сегодня (я ожидал, что это будет значение параметра, а не простой аргумент ...)
Вы можете вызвать напрямую
last reboot
Псевдопользовательская перезагрузка регистрируется каждый раз при перезагрузке системы. Таким образом, последняя перезагрузка покажет журнал всех перезагрузок с момента создания файла журнала.
кроме того, он дает время, с которого запускается файл журнала ( /var/log/wtmp
). Если вас также интересует прошлое, обычно там хранятся один или несколько файлов с прошлыми журналами ( /var/log/wtmp.1
) ...
Ниже приведен небольшой пример скрипта для подсчета количества перезагрузок и сбоев за один день.
Вы можете запустить его, /bin/bash Myscript.sh
чтобы получить результаты на сегодня или /bin/bash Myscript.sh "Tue May 20"
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"
Примечания: с перезагрузкой у вас мало проблем, потому что при каждой перезагрузке по одной строке.
Этот счетчик сбоя является только ориентировочным: в случае сбоя вы можете иметь много строк (например, по одной на каждую оболочку). Более того, если сбой не является внезапным, у вас может быть разное время для одного и того же сбоя (возможно, секунда или минута, если он находится на границе). Более того, даже если это случается реже, вы можете сделать аварийное завершение оболочки без сбоя системы. Опция сортировки пытается убить повторяющиеся строки за одно и то же время. Чтобы получить правильный результат, вы должны считать перезагрузкой только строки перезагрузки без сбоев между ними, а также перезагрузку с сбоем ранее.
Легко узнать с помощью tuptime , приведу пример:
Tuptime отслеживает закрытие / запуск системы, а также позволяет фильтровать их отчет с заданной отметки времени.
Ну, так как последние 24 часа составляют 86400 секунд, строка выполнения с отрицательным временем в секундах и указанием команды даты в качестве ссылки:
$ 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
...
Другой интересный вывод - опция table:
$ 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
Я сделал скрипт оболочки simpe, который покажет вам, сколько раз наша система перезагружалась за день.
#!/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 раза перезагрузился