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
您可以检查系统日志文件
/var/log/syslog
中的指示挂起/休眠/恢复事件的消息并查看它们的时间戳。对于挂起和恢复,检查例如这个模式:
示例输出:
这只会检查当前的 syslog 文件,但由于它会进行日志轮换,因此较旧的消息将存档在编号和压缩的文件中,例如
/var/log/syslog.1
和/var/log/syslog.2.gz
. 要一次检查所有这些,请zgrep
改用它,它可以读取压缩文件,并按sort
实际时间戳日期按顺序取回它们:要仅获取最后两行(通常是最后暂停和恢复),您可以附加
| tail -n 2
到上述任一命令。如果您只想暂停或仅恢复,请将过滤器模式更改为例如
PM: suspend entry
或PM: suspend exit
相应地。我现在没有可用的休眠系统来搜索该事件的适当消息,但我希望有类似的东西。尝试搜索例如
grep hiber /var/log/syslog
找到合适的模式。如果您有,请发表评论,我很乐意将其添加到此答案中以供将来参考。但请注意时间戳并将它们与您知道的实际实时时间进行比较,因为某些“迟到”消息
systemd[1]: Started Suspend.
可以在系统实际关闭之前触发,但实际上会以时间戳记录并写入磁盘当它再次打开时。正如我评论 Byte Commader 的回复时,出于某种原因,至少在我的两个 Ubuntu 16 安装中,“PM:suspend”和“PM:resume”事件似乎都在恢复期间写入了 syslog。因此,该解决方案中的暂停时间与恢复时间相同在一秒内。但是,恢复时间是正确的。
所以这个解决方案不是基于日志文件的。它基于非常简单的服务连续运行并监控睡眠前后的时间差。如果差异远大于睡眠时间,则存在“暂停”,例如暂停/恢复操作。当时间同步时,在唤醒后记录暂停。
暂停记录器.sh
服务定义也是简单的文件:/etc/systemd/system/pauselogger.service
然后启动并启用记录器:
日志文件:
这个解决方案的优点是尽管有暂停命令它仍然有效。如果使用操作系统级别的挂起/休眠/恢复,它会记录暂停,但如果在虚拟机内部使用,它也可以工作,例如 VirtualBox 保存状态/恢复。
缺点是至少两个日志条目都是在唤醒期间写入的,这种解决方案不适合,例如,如果需要在保存状态操作之前启动脚本。也没有记录导致睡眠/唤醒的命令:操作系统挂起与 VirtualBox 保存状态或操作系统恢复与 VirtualBox 启动。