내 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 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
귀하의 경우 옵션이 편리해질 것입니다 ...남자의 시간:
-에스| --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' 앞의 텍스트를 추출합니다.