AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1171742
Accepted
user4955663
user4955663
Asked: 2019-09-09 05:47:56 +0800 CST2019-09-09 05:47:56 +0800 CST 2019-09-09 05:47:56 +0800 CST

如何获取上次系统休眠/暂停/恢复的日期/时间?

  • 772

如何获取这些事件的日期/时间:

  • 最后一个系统休眠/挂起
  • 上次系统恢复
suspend hibernate resume
  • 2 2 个回答
  • 2024 Views

2 个回答

  • Voted
  1. Byte Commander
    2019-09-09T07:26:32+08:002019-09-09T07:26:32+08:00

    您可以检查系统日志文件/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
    

    这只会检查当前的 syslog 文件,但由于它会进行日志轮换,因此较旧的消息将存档在编号和压缩的文件中,例如/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.可以在系统实际关闭之前触发,但实际上会以时间戳记录并写入磁盘当它再次打开时。

    • 9
  2. Best Answer
    user4955663
    2019-09-14T01:23:05+08:002019-09-14T01:23:05+08:00

    正如我评论 Byte Commader 的回复时,出于某种原因,至少在我的两个 Ubuntu 16 安装中,“PM:suspend”和“PM:resume”事件似乎都在恢复期间写入了 syslog。因此,该解决方案中的暂停时间与恢复时间相同在一秒内。但是,恢复时间是正确的。

    所以这个解决方案不是基于日志文件的。它基于非常简单的服务连续运行并监控睡眠前后的时间差。如果差异远大于睡眠时间,则存在“暂停”,例如暂停/恢复操作。当时间同步时,在唤醒后记录暂停。

    暂停记录器.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
    

    这个解决方案的优点是尽管有暂停命令它仍然有效。如果使用操作系统级别的挂起/休眠/恢复,它会记录暂停,但如果在虚拟机内部使用,它也可以工作,例如 VirtualBox 保存状态/恢复。

    缺点是至少两个日志条目都是在唤醒期间写入的,这种解决方案不适合,例如,如果需要在保存状态操作之前启动脚本。也没有记录导致睡眠/唤醒的命令:操作系统挂起与 VirtualBox 保存状态或操作系统恢复与 VirtualBox 启动。

    • 0

相关问题

  • 混合动力在哪里暂停?

  • 如何让我的电脑中的风扇在暂停时关闭?[关闭]

  • 为什么我的 Kubuntu 会话在恢复后需要相当长的时间才能响应?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve