如何找到自上次从待机状态唤醒以来的正常运行时间

deb*_*ser 41 linux standby uptime

我想知道自上次从待机状态唤醒以来的正常运行时间。

该命令uptime仅显示当前时间减去上次启动时间的差值。

小智 30

在 中/var/log/pm-suspend.log,寻找看起来像这样的最后一行:

Sun Dec 16 09:30:31 CET 2012: Awake.
Run Code Online (Sandbox Code Playgroud)

那是你最后一次醒来的时间。您可以按照 Paul 建议的方式计算从那时起的正常运行时间。

logrotate会定期“旋转”日志以防止它们变得太大,因此您可能会找到一个空pm-suspend.log文件。在这种情况下,只需查找该pm-suspend.log.1文件(您可能还会找到其他名为 like 等的日志文件pm-suspend.log.2.gz;您可以使用zcat或来检查它们zless)。

  • 如果 `pm-suspend.log` 为空怎么办?:( (5认同)
  • 我的电脑中没有这样的文件(运行 Ubuntu 16.04 LTS) (2认同)

Ari*_*Ari 22

对于运行 systemd 的台式机/服务器,虽然没有直接命令可以直接告诉信息(据我所知),但所有数据都在日志中捕获。

您可以 grep 日志,例如:

echo ">> [SUSPEND] Times during current boot"
journalctl -b 0 |grep "]: Suspending system..."
echo ">> [WAKE] Times during current boot"
journalctl -b 0 |grep "PM: Finishing wakeup"
Run Code Online (Sandbox Code Playgroud)

或者,对于花哨的输出,我写了一个 python3 脚本(在 Fedora 23 上运行良好)示例输出:

Initial Boot Timestamp:  2016-01-15 09:31:32 

     Wake Timestamp     |    Suspend Timestamp   |       Awake Time       |
  --------------------  |  --------------------  |  --------------------  |
   2016-01-15 09:31:32  |   2016-01-15 09:36:03  |          0h  4m        |
   2016-01-15 09:36:22  |   2016-01-15 19:15:04  |          9h 38m        |
   2016-01-15 19:22:21  |   2016-01-15 20:00:05  |          0h 37m        |
   ...
   -------------------  |  --------------------  |  --------------------  | 

Summary: Days Since Boot [8.23] | Days Awake [4.14] | Suspend/Wake Cycles: [28]
Run Code Online (Sandbox Code Playgroud)

脚本在github中。链接到 github 仓库

  • 在 Fedora 上,这对我有用:`journalctl -b 0 | grep "系统已恢复" | 尾-1` (2认同)

小智 22

pm-suspend 程序不是如何挂起计算机的唯一选项。我的这个程序的日志现在是空的,但我发现了更可靠的命令:

cat /var/log/syslog | grep 'systemd-sleep' | grep "Suspending\|resumed"
Run Code Online (Sandbox Code Playgroud)

输出是:

Oct  2 09:11:48 dmatej-lenovo systemd-sleep[931]: Suspending system...
Oct  2 09:53:10 dmatej-lenovo systemd-sleep[931]: System resumed.
Oct  2 15:02:48 dmatej-lenovo systemd-sleep[27516]: Suspending system...
Oct  2 16:07:19 dmatej-lenovo systemd-sleep[27516]: System resumed.
Oct  2 16:32:48 dmatej-lenovo systemd-sleep[29622]: Suspending system...
Oct  2 17:16:41 dmatej-lenovo systemd-sleep[29622]: System resumed.
Oct  3 00:24:58 dmatej-lenovo systemd-sleep[21316]: Suspending system...
Oct  3 08:17:22 dmatej-lenovo systemd-sleep[21316]: System resumed.
Oct  3 09:09:25 dmatej-lenovo systemd-sleep[24739]: Suspending system...
Oct  3 09:50:47 dmatej-lenovo systemd-sleep[24739]: System resumed.
Run Code Online (Sandbox Code Playgroud)


odi*_*ont 9

这些答案都不适合我。但我有用地发现sleep.target这是为这个而制作的:

$ journalctl -n4 -u sleep.target
nov. 17 17:16:37 kaa systemd[1]: Reached target Sleep.
nov. 17 18:46:22 kaa systemd[1]: Stopped target Sleep.
nov. 17 19:27:31 kaa systemd[1]: Reached target Sleep.
nov. 17 19:45:21 kaa systemd[1]: Stopped target Sleep.
Run Code Online (Sandbox Code Playgroud)

  • 这也是唯一对我有用的(使用 Linux Mint 19 Cinnamon) (3认同)
  • @Suzana 提供了计算自以下时间以来的时间的提示:`$ datediff -f%H:%M:%S $(journalctl -n4 -u sleep.target -o Short-iso | tail -n 1 | cut -d' ' -f 1) now` -> `5:38:48` (http://www.fresse.org/dateutils/) (2认同)
  • 仅当您还添加“-r”以获取最新时间戳时,“journalctl -n1”才有效,但您是对的,它更短。 (2认同)

Pau*_*aul 0

你用什么来启动待机?

如果您可以使用脚本,则在该行之后

echo -n "standby" > /proc/acpi/sleep
Run Code Online (Sandbox Code Playgroud)

你可以接电话

echo `date +%s` >> /var/log/wakeups.log
Run Code Online (Sandbox Code Playgroud)

或者类似的东西。这意味着机器醒来时所做的第一件事是将当前时间和日期写入日志文件(自纪元起 n 秒)。

那么tail -1 /var/log/wakeups.log就给你最后一次。您可以从当前时间中减去该时间以获得自上次唤醒以来的秒数。