正常運作時間/tuptime 查詢

正常運作時間/tuptime 查詢

因為我的 umpc 處理掛起/休眠的能力很差,所以我不得不在定時空閒後編寫關閉腳本。

主要腳本:

#!/bin/bash

idletime=$((15*60*1000)) # 15 min in milliseconds 
#idletime=$((5*20*330)) # about one minute, for testing 
idle=0
while [ $idle -lt $idletime ];do     
    idle=`xprintidle` 
    sleep 1 
done 
/home/jake/Scripts_Icons/Word_Shutdown 
sleep 2 
sudo shutdown -P now

劇本Word_Shutdown

#!/bin/bash 

if test $(wmctrl -l | grep "Microsoft Word" 2>&1 | wc -l) -eq 1; then      
    wmctrl -a "Microsoft Word"     
    sleep .2     
    xdotool keydown 0xffea + key 4     
    sleep .2     
    xdotool keyup 0xffea     
    sleep .2    
    xdotool key y 
fi

它可以工作,但為了正確監控電池壽命,我希望將一次電池充電期間的正常運行時間合併為一次正常運行時間。

那可能嗎?我看到這tuptime將顯示上一個會話的正常運行時間並開始監視當前會話的正常運行時間。有沒有辦法將這些輸出組合成一個讀數,例如3hr 4 min

命令tuptime輸出:

[jake@P3 ~]$  sudo tuptime -S 2 
System startups:    8  since  06:14:53 PM 06/20/2022 
System shutdowns:   0 ok  +  7 bad 
System life:            17h 50m 4s  

System uptime:          16.15%  =  2h 52m 46s 
System downtime:    83.85%  =  14h 57m 18s  

Average uptime:     21m 36s 
Average downtime:   2h 8m 11s  

Current uptime:     2h 9m 1s  since  09:55:56 AM 06/21/2022

「系統正常運作時間」顯然結合了停機之間的所有正常運作時間。

我努力了:

tuptime | awk -F'=' '/System uptime:/ {print $2}'

它可以工作,但是也列印秒數和前導空格,即2h 52m 46s。有沒有辦法削減秒和前導空白,只留下小時和分鐘,即2h 52m

或者uptime它本身有一個可以類似搖動的手把嗎?

答案1

它有效,但是為了正確監控電池壽命,我希望將一次電池充電後的會話期間的正常運行時間合併為一次正常運行時間。

為了正確監控電池壽命:

  • 識別電池的設備參考(名稱),如下upower -e所示:

    upower -e | grep -i "batt"
    
  • upower -i透過使用電池的參考(名稱)來獲取電池信息,如下所示:

    upower -i /org/freedesktop/UPower/devices/battery_BAT0
    
  • 細化upower -i輸出以僅獲得狀態像這樣:

    awk '/state:/ {print $2}' <(upower -i /org/freedesktop/UPower/devices/battery_BAT0)
    
  • 細化upower -i輸出以僅獲得百分比沒有“%”,如下所示:

    awk '/percentage:/ {print 0+$2}' <(upower -i /org/freedesktop/UPower/devices/battery_BAT0)
    
  • 在腳本中使用上述知識,該腳本每五分鐘檢查一次,以便在電池充電時執行關閉命令(替換# Your shutdown command here為實際命令)達8%以下當它在放電狀態像這樣:

#!/bin/bash

while true; do
    state="$(awk '/state:/ {print $2}' <(upower -i /org/freedesktop/UPower/devices/battery_BAT0))"
    percentage="$(awk '/percentage:/ {print 0+$2}' <(upower -i /org/freedesktop/UPower/devices/battery_BAT0))"
    [ "$state" == "discharging" ] && [ "$percentage" -le "8" ] && # Your shutdown command here
    sleep 300
done

因為我的 umpc 處理掛起/休眠的能力很差,所以我不得不在定時空閒後編寫關閉腳本。

主要腳本:

#!/bin/bash ...

  • 您的主腳本使用反引號“...”進行命令替換:

    idle=`xprintidle`
    

    雖然它仍然可以工作,但命令替換的反引號被認為是遺留功能(舊的,將來可能會被棄用)在 bash 中,所以我建議$(...)像這樣使用:

    idle=$(xprintidle)
    
  • 對於這樣不重要的任務來說,這個sleep 1呼叫太短了……所以我建議將其延長到30幾秒甚至一分鐘,如下所示:

    sleep 1m
    

劇本Word_Shutdown

#!/bin/bash ...

  • 您的Word_Shutdown腳本在這部分有兩個問題:

    if test $(wmctrl -l | grep "Microsoft Word" 2>&1 | wc -l) -eq 1; then
    

    首先,您不需要使用grep "Microsoft Word" 2>&1 | wc -l...grep -c "Microsoft Word" 2>&1會輸出相同的結果。

    其次,引用直接在評估部分使用的命令替換,if以防止可能的分詞,如下所示:

    if test "$(wmctrl -l | grep -c "Microsoft Word" 2>&1)" -eq 1; then
    

我努力了:

tuptime | awk -F'=' '/System uptime:/ {print $2}'

它可以工作,但是也列印秒數和前導空格,即
2h 52m 46s。有沒有辦法削減秒和前導空白,只留下小時和分鐘,即2h 52m

是的,甚至更好且面向未來(例如,如果System uptime包含超過 3 個字段,例如4d 22h 31m 54s),如下所示:

tuptime | awk '/System uptime:/  {for (i=1; i < NF; i++) {if (i > 4) {if (i < (NF - 1)) printf("%s ", $i); else print $i}}}'

「系統正常運作時間」顯然結合了停機之間的所有正常運作時間。

那是對的。

或者正常運作時間本身是否有一個可以類似搖動的手把?

也許,這個-s選項在你的情況下會變得很方便...從男人的時間:

-s| --seconds 輸出時間(以秒和紀元為單位)

答案2

Tuptime 可以縮小他們報告中的範圍。由於您需要當前的和前一個,請使用tuptime -S -1,檢查它與表輸出是否正確-t

並一起計算兩個正常運作時間:

tuptime -S -1 --csv | grep 'System uptime' | cut -d\" -f6 | awk -F\m '{print $1"m"}'

使用 Tuptime csv 輸出輕鬆解析它、匹配目標行、剪切字段並提取“m”之前的文字。

相關內容