私のコンピュータが1日に実行できる時間の1日の制限を設定したいと思います。そのために、特定のマイルストーンに達したときに適切なアクションをとるcronスクリプトを作成しています(タイムアウトした場合は警告を表示し、タイムアウトした場合はコンピュータをシャットダウンします)。
私が悩んでいるのは、一日の総稼働時間を分単位で取得することです。私は見たことがないこの稼働時間スクリプトしかし、私の考えでは最後最も簡単。
$ last -s today
私に次のようなものを与えました:
user tty1 Sat Jul 22 14:09 still logged in
user tty1 Sat Jul 22 11:50 - down (01:56)
現在の括弧内の時間を分に変換し、「まだログイン状態」セッションを分に変換しようとしています。うまくいきますが、これらのオプションは少し複雑だと思います。
分単位で総稼働時間(一時停止/スリープを除く)を取得する簡単な方法はありますか?または、このタイプの出力の回避策を見つける必要がありますか?
答え1
uptime
現在のセッションの合計時間(分)を取得するには、シェルで次のコマンドを実行します。
echo "Total uptime today (minutes): $(( ($(date +%s) - $(date -d "$(uptime -s)" +%s)) / 60 ))"
awk
以下を使用して実行します/proc/uptime
。
awk '{print "Total uptime for the machine (minutes):", int($1 / 60)}' /proc/uptime
修正する:
最初の2つのコマンドは、現在のセッションの実行時間のみを表示します。
これで小さなbashスクリプトで実装し、シェルで1行のコードでこれを行うこともできますlast
。/proc/uptime.
#!/bin/bash
sessions_uptime=$(last | grep "$(date '+%b %d')" | grep 'reboot' | grep -v 'still running' | awk '{print $NF}' | tr -d '()' | awk -F: '{sum_minutes+=$1*60+$2} END {print sum_minutes}')
current_time=$(awk '{print int($1 / 60)}' /proc/uptime)
total_uptime=$((sessions_uptime + current_time))
echo "TOTAL CURRENT RUNTIME OF THE DAY: ${total_uptime}"
sessions_uptime
- を除く
reboots
すべての項目をフィルタリングし、その日付のすべてのセッションの時間を分単位で計算します。last
still running
current_time
- セッションの現在の実行時間を計算します。
total_uptime
- 現在のセッションを含む、その日付の合計稼働時間である2つの値の合計を出力します。私はこれをDebian 11.7で実装しました。これがすべてのシステムで動作するかどうかは言えません。
アップデート2:
#!/bin/bash
get_minutes() {
local h=${1%%:*}
local m=${1#*:}
echo $((10#$h * 60 + 10#$m))
}
sessions_uptime=$(last | grep "$(date '+%b %d')" | grep -E 'reboot|suspended' | grep -v 'still running' | awk '{print $NF}' | tr -d '()' | awk -F: '{sum_minutes+=$1*60+$2} END {print sum_minutes}')
current_uptime_seconds=$(awk '{print int($1)}' /proc/uptime)
total_uptime=$((sessions_uptime + current_uptime_seconds / 60))
echo "TOTAL CURRENT RUNTIME OF THE DAY: ${total_uptime} minutes"
考慮すべき可能なシナリオを決定し、アプローチが適切であればスクリプトを調整します。
インターネットでこれらのステータスメッセージが見つかりましlast
たが、すべてが正しいことを確認できません。
」再起動」
システムが正常に再起動されました
「閉鎖」
システムが正常にシャットダウンされました。
「停止する」
システムが一時停止または休止状態に切り替わりました。
「再び覆う」
システムが一時停止または休止状態で再起動されました。
「衝突」
エラーまたはクラッシュによりシステムが再起動します。
「下に」
システムがダウンしました。これは、停電やハードウェアの問題によっても発生する可能性があります。
「消える - ログアウトなし」
ユーザーが正しくログアウトせずに突然接続を終了した場合に表示されることがあります。