Запрос времени безотказной работы/время безотказной работы

Запрос времени безотказной работы/время безотказной работы

Поскольку мой 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в вашем случае эта опция окажется удобной...человек время:

| --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».

Связанный контент