uptime/tuptime 查询

uptime/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`
    

    虽然它仍然可以工作,但命令替换的反引号被视为遗留功能(旧版本,将来可能会被弃用) 因此我建议改用$(...)如下方式:

    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”之前的文本。

相关内容