省電力モード時間以外の稼働時間を表示するには?

省電力モード時間以外の稼働時間を表示するには?

ラップトップを一時停止モードにして後で目覚めさせたところ、約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)、(私が知っている限り)どのユーティリティでも利用できません。与えられた答えを見ましたPythonの例アクセス方法については、同じ作業を行うためにCプログラムをコンパイルするよりも簡単です。

答え3

システムの解析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時間程度になります。

関連情報