Как получить дату / время этих событий:
Поскольку я прокомментировал ответ Commader Байта, по некоторым причинам по крайней мере на моих двух установках Ubuntu 16, кажется, что события "PM: suspend" и "PM: resume" оба записаны в системный журнал во время резюме. Таким образом, приостановить время в том решении - в течение одной секунды то же как время резюме. Однако время резюме корректно.
Таким образом, это решение не основано на файлах журнала. Это основано на очень простом сервисе, работающем непрерывно и контролирующем разницу во времени прежде и после сна. Если различие намного больше, чем время сна затем была "пауза", например, приостанавливает/возобновляет операцию. Пауза зарегистрирована после пробуждения, когда время синхронизируется.
pauselogger.sh
set -e
if [[ "$#" < 1 || "$#" > 1 ]]
then
echo "Illegal number of parameters"
echo "Usage $0 <sleeptime in seconds>"
exit 1
fi
sleepTime=$1
fileName="/var/log/state.log"
dateStr1=$(date "+%Y-%m-%d %T.%N %z %s")
dateInt1=$(echo $dateStr1 | cut -d' ' -f4)
dateInt2=$dateInt1
dateStr2=$dateStr1
diff=0
for (( ; ; ))
do
diff="$(($dateInt1-$dateInt2))"
maxDiff=$(echo $sleepTime*1.1 + 1 | bc) # Pause is 10% longer than sleep.
if (( $(echo "$diff > $maxDiff" |bc -l) )); then
echo "$dateStr2 DOWN pre sleep" >> $fileName
echo "$dateStr1 UP post sleep $diff" >> $fileName
fi
dateStr2=$dateStr1
dateInt2=$dateInt1
sleep $sleepTime
dateStr1=$(date "+%Y-%m-%d %T.%N %z %s")
dateInt1=$(echo $dateStr1 | cut -d' ' -f4)
done
Сервисным определением является также простой файл:/etc/systemd/system/pauselogger.service
[Unit]
Description=Simple Pause Logger
[Service]
ExecStart=/usr/sbin/pauselogger.sh 30
Restart=on-failure
[Install]
WantedBy=multi-user.target
Регистратор затем запущен и включен:
sudo systemctl start pauselogger
sudo systemctl enable pauselogger
Файл журнала:
2019-09-13 00:44:17.602146211 +0300 1568324657 UP post sleep 225
2019-09-13 01:04:59.968326886 +0300 1568325899 DOWN pre sleep
2019-09-13 10:25:18.575107533 +0300 1568359518 UP post sleep 33619
2019-09-13 10:49:41.594151484 +0300 1568360981 DOWN pre sleep
2019-09-13 10:51:57.129617072 +0300 1568361117 UP post sleep 136
Профессионалы этого решения - то, что оно работает несмотря на команду "пауза". Это записывает паузы, если уровень ОС приостанавливает / в спящем режиме/возобновляет, используется, но это также работает, если используется в VM, например, VirtualBox savestate/resume.
Недостатки по крайней мере, что обе записи в журнале записаны во время пробуждения, это решение не подходит, например, если сценарий необходим, чтобы быть запущенным незадолго до savestate операция. Также сон/пробуждение порождения команды не зарегистрирован: ОС приостанавливает по сравнению с VirtualBox savestate, или резюме ОС по сравнению с VirtualBox запускаются.
Вы могли исследовать свой системный файл журнала /var/log/syslog
для сообщений, указывающих, приостанавливают / в спящем режиме/возобновляют события и смотрят на их метки времени.
Для приостанавливают и возобновляют, проверяют, например, этот шаблон:
grep -E 'PM: suspend (entry|exit)' /var/log/syslog
Пример произвел:
Sep 8 09:43:26 type40mark3 kernel: [150509.893804] PM: suspend entry (deep)
Sep 8 15:03:39 type40mark3 kernel: [150514.147721] PM: suspend exit
Sep 8 16:33:41 type40mark3 kernel: [155914.275076] PM: suspend entry (deep)
Sep 8 17:04:58 type40mark3 kernel: [155919.343276] PM: suspend exit
Это только проверяет текущий файл системного журнала, но поскольку он подвергается вращению журнала, старые сообщения будут заархивированы в пронумерованных и сжатых файлах как /var/log/syslog.1
и /var/log/syslog.2.gz
. Для проверки всех их сразу использовать zgrep
вместо этого, который может считать сжатые файлы, и sort
вернуть их в порядке фактической датой метки времени:
zgrep -hE 'PM: suspend (entry|exit)' /var/log/syslog* | sort -M
Для получения только последних двух строк (в последний раз приостанавливают и возобновляются, обычно), можно добавить | tail -n 2
к любой из вышеупомянутых команд.
Если Вы хотите, только приостанавливают или только возобновляют, изменяют шаблон фильтра к, например. PM: suspend entry
или PM: suspend exit
соответственно.
Я не имею бывшую в спящем режиме систему в наличии прямо сейчас для поиска соответствующих сообщений для того события, но я ожидаю что-то подобное. Попытайтесь искать, например. grep hiber /var/log/syslog
найти подходящий шаблон. Когда Вы имеете один, прокомментируйте, и я с удовольствием добавлю его к этому ответу для дальнейшего использования.
Обратите внимание на метки времени, хотя и сравнивают их с фактическим реальным временем, Вы знаете, потому что некоторые "последние" сообщения как systemd[1]: Started Suspend.
может быть инициирован прямо, прежде чем система на самом деле выключает, но будет на самом деле зарегистрирована и записана в диск с меткой времени того, когда это включает снова.