![如何显示排除睡眠模式时间的正常运行时间?](https://linux22.com/image/34663/%E5%A6%82%E4%BD%95%E6%98%BE%E7%A4%BA%E6%8E%92%E9%99%A4%E7%9D%A1%E7%9C%A0%E6%A8%A1%E5%BC%8F%E6%97%B6%E9%97%B4%E7%9A%84%E6%AD%A3%E5%B8%B8%E8%BF%90%E8%A1%8C%E6%97%B6%E9%97%B4%EF%BC%9F.png)
我将笔记本电脑置于挂起模式,稍后将其唤醒,现在它显示正常运行时间约为 23 小时(带有uptime
),这显然是不正确的。我怀疑uptime
只是返回启动时时间戳与现在时间戳之间的差异。
有没有办法显示正常运行时间,不包括在挂起和休眠等低功耗模式下花费的时间?
答案1
以下命令适用于我的 Mint 19 上的 Python 2.7.15rc1。
它们将显示不包括睡眠时间的正常运行时间。
python3 -c 'import time;print(f" {(time.clock_gettime(time.CLOCK_MONOTONIC))}")'
上面显示的时间以秒为单位,带小数。
python3 -c 'import time;second=int(time.clock_gettime(time.CLOCK_MONOTONIC));print(f" {second} seconds")'
上面显示的时间以秒为单位,没有小数点。
python3 -c 'import time;second=int(time.clock_gettime(time.CLOCK_MONOTONIC));minute=second//60;print(f" {minute} minutes")'
上面显示的时间以分钟为单位。
python3 -c 'import time;s=int(time.clock_gettime(time.CLOCK_MONOTONIC));h=s//3600;m=(s-h*3600)//60;print(f"{h} hours {m} minutes")'
上面显示了以小时和分钟为单位的时间。
python3 -c 'import time,datetime;print(datetime.timedelta(seconds=time.clock_gettime(time.CLOCK_MONOTONIC)))'
上面显示了以小时、分钟和秒为单位的时间。
python3 -c 'import time,datetime;d=datetime.datetime(1,1,1)+datetime.timedelta(seconds=time.clock_gettime(time.CLOCK_MONOTONIC));print(f"{d.day-1} days, {d.hour} hours, {d.minute} minutes")'
上面显示了以天、小时和分钟为单位的时间。
我用过CLOCK_MONOTONIC
和Awk
创建一个脚本,如果我的 Mint 在同一日期启动多次,该脚本将计算总时间。这Awk
命令甚至可以用来计算一周/一个月/一年的总时间。
答案2
您可能想使用 C 函数clock_gettime(CLOCK_MONOTONIC_RAW)
,这不是由任何实用程序(据我所知)提供的。我看到一个答案给出了蟒蛇的例子关于如何访问它,这可能比编译 C 程序来完成同样的事情更容易。
答案3
解析Systemd的journalctl
suspend.service
从启动时间(恢复时)减去 systemd 的启动时间即可得出暂停的时间量:
$ journalctl -b-0 | grep -E 'systemd\[1]: Start.*Suspend'
Oct 31 05:55:19 alien systemd[1]: Starting Suspend...
Oct 31 16:54:26 alien systemd[1]: Started Suspend.
Oct 31 23:21:21 alien systemd[1]: Starting Suspend...
Nov 01 04:29:12 alien systemd[1]: Started Suspend.
(... SNIP ...)
Nov 07 05:53:36 alien systemd[1]: Starting Suspend...
Nov 07 16:37:36 alien systemd[1]: Started Suspend.
Nov 07 21:07:28 alien systemd[1]: Starting Suspend...
Nov 08 05:08:52 alien systemd[1]: Started Suspend.
标记的条目Started Suspend.
可以解释为机器从挂起状态恢复的时间。
您可以使用此脚本获得格式化输出:
这是 bash 脚本生成的内容:
$ suspendtime
Oct 31 05:55:19 to Oct 31 16:54:26 lasting 39,547 seconds
Oct 31 23:21:21 to Nov 01 04:29:12 lasting 18,471 seconds
(... SNIP ...)
Nov 07 05:53:36 to Nov 07 16:37:36 lasting 38,640 seconds
Nov 07 21:07:28 to Nov 08 05:08:52 lasting 28,884 seconds
Linux uptime 693,600 seconds (8 days, 40 minutes)
16 Suspends 457,547 seconds (5 days, 7 hours, 5 minutes, 47 seconds)
Real uptime 236,053 seconds (2 days, 17 hours, 34 minutes, 13 seconds)
Linux 报告的正常运行时间为 8 天 40 分钟。算上暂停的时间,确实是2天18小时左右。