가동 시간/ 가동 시간 쿼리

가동 시간/ 가동 시간 쿼리

내 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배터리가 충전될 때 종료 명령을 실행하기 위해(실제 명령으로 대체) 5분마다 확인하는 스크립트에서 위의 지식을 사용하십시오.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)
    
  • 그렇게 중요하지 않은 작업을 수행하기에는 통화 가 너무 짧습니다. 따라서 다음과 같이 몇 초 또는 1분 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 uptime3개 이상의 필드가 포함된 경우 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귀하의 경우 옵션이 편리해질 것입니다 ...남자의 시간:

-에스| --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' 앞의 텍스트를 추출합니다.

관련 정보