因為我的 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”之前的文字。