Abfrage „uptime/tuptime“

Abfrage „uptime/tuptime“

Weil mein UMPC den Ruhezustand/Ruhezustand schlecht handhabt, musste ich ein Skript für das Herunterfahren nach einer zeitgesteuerten Leerlaufzeit erstellen.

Das Hauptskript:

#!/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

Das Word_ShutdownSkript:

#!/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

Es funktioniert, aber um die Akkulaufzeit richtig zu überwachen, möchte ich, dass meine Betriebszeiten während der Sitzungen mit einer Akkuladung zu einer Betriebszeit zusammengefasst werden.

Ist das möglich? Ich sehe, dass tuptimedie Betriebszeit der vorherigen Sitzung angezeigt wird und die Betriebszeit der aktuellen Sitzung überwacht wird. Gibt es eine Möglichkeit, diese Ausgaben beispielsweise zu einer einzigen Anzeige zu kombinieren 3hr 4 min?

Die tuptimeBefehlsausgabe:

[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

Die „Systembetriebszeit“ fasst offenbar alle Betriebszeiten zwischen den Abschaltungen zusammen.

Ich habe versucht:

tuptime | awk -F'=' '/System uptime:/ {print $2}'

Es funktioniert, druckt aber auch die Sekunden und das führende Leerzeichen, d. h 2h 52m 46s. Gibt es eine Möglichkeit, die Sekunden und das führende Leerzeichen abzuschneiden, sodass nur die Stunden und Minuten übrig bleiben, d. h 2h 52m.?

Oder uptimebesitzt es selbst einen Griff, an dem man ebenso wackeln kann?

Antwort1

Es funktioniert, aberum die Akkulaufzeit richtig zu überwachen, möchte ich, dass meine Betriebszeiten während der Sitzungen mit einer Akkuladung zu einer Betriebszeit zusammengefasst werden.

Um die Akkulaufzeit richtig zu überwachen:

  • Identifizieren Sie die Gerätereferenz (den Namen) Ihrer Batterie folgendermaßen upower -e:

    upower -e | grep -i "batt"
    
  • Erhalten Sie Batterieinformationen, indem Sie upower -idie Referenz (den Namen) Ihrer Batterie wie folgt verwenden:

    upower -i /org/freedesktop/UPower/devices/battery_BAT0
    
  • Verfeinern Sie die upower -iAusgabe, um nurZustandetwa so:

    awk '/state:/ {print $2}' <(upower -i /org/freedesktop/UPower/devices/battery_BAT0)
    
  • Verfeinern Sie die upower -iAusgabe, um nurProzentsatzohne "%" etwa so:

    awk '/percentage:/ {print 0+$2}' <(upower -i /org/freedesktop/UPower/devices/battery_BAT0)
    
  • Verwenden Sie das oben genannte Wissen in einem Skript, das alle fünf Minuten prüft, ob Ihr Shutdown-Befehl ausgeführt wird (ersetzen Sie ihn # Your shutdown command heredurch Ihren tatsächlichen Befehl), wenn Ihre Batterieladungerreicht 8 % oder wenigerwährend es imEntladezustandetwa so:

#!/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

Da mein UMPC den Ruhezustand/Ruhezustand schlecht handhabt, musste ich ein Skript für das Herunterfahren nach einer zeitgesteuerten Leerlaufzeit erstellen.

Das Hauptskript:

#!/bin/bash ...

  • Ihr Hauptskript verwendet Backticks „...“ zur Befehlsersetzung:

    idle=`xprintidle`
    

    Obwohl es immer noch funktioniert, gelten Backticks zur Befehlsersetzung als veraltete Funktion (alt und könnte in Zukunft veraltet sein) in Bash, daher empfehle ich $(...)stattdessen die Verwendung wie folgt:

    idle=$(xprintidle)
    
  • Der sleep 1Anruf ist für eine so unkritische Aufgabe zu kurz. Ich empfehle daher, ihn etwa auf 30Sekunden oder sogar eine Minute zu verlängern, und zwar wie folgt:

    sleep 1m
    

Das Word_ShutdownSkript:

#!/bin/bash ...

  • Ihr Word_ShutdownSkript weist in diesem Teil zwei Probleme auf:

    if test $(wmctrl -l | grep "Microsoft Word" 2>&1 | wc -l) -eq 1; then
    

    Erstens müssen Sie nicht grep "Microsoft Word" 2>&1 | wc -l… verwenden grep -c "Microsoft Word" 2>&1, es wird das gleiche Ergebnis ausgegeben.

    Zweitens: Zitieren Sie die Befehlsersetzung direkt im ifAuswertungsteil, um eine mögliche Worttrennung zu verhindern, wie folgt:

    if test "$(wmctrl -l | grep -c "Microsoft Word" 2>&1)" -eq 1; then
    

Ich habe versucht:

tuptime | awk -F'=' '/System uptime:/ {print $2}'

Es funktioniert, druckt aber auch die Sekunden und das führende Leerzeichen, d. h
2h 52m 46s. Gibt es eine Möglichkeit, die Sekunden und das führende Leerzeichen abzuschneiden, sodass nur die Stunden und Minuten übrig bleiben, d. h 2h 52m.?

Ja, und noch besser und zukunftssicher (z. B. wenn System uptimemehr als 3 Felder enthalten sind 4d 22h 31m 54s) wie folgt:

tuptime | awk '/System uptime:/  {for (i=1; i < NF; i++) {if (i > 4) {if (i < (NF - 1)) printf("%s ", $i); else print $i}}}'

Die „Systembetriebszeit“ fasst offenbar alle Betriebszeiten zwischen den Abschaltungen zusammen.

Das ist richtig.

Oder verfügt Uptime selbst über einen Hebel, der auf ähnliche Weise gerüttelt werden kann?

Vielleicht -sist diese Option für Sie nützlich ... vonMann Tuptime:

-S| --seconds Ausgabezeit in Sekunden und Epoche

Antwort2

Tuptime könnte den Bereich in seinen Berichten einschränken. Da Sie den aktuellen und nur den vorherigen benötigen, verwenden Sie tuptime -S -1und überprüfen Sie, ob dies mit der Tabellenausgabe richtig ist -t.

Und um beide Betriebszeiten zusammen zu berechnen:

tuptime -S -1 --csv | grep 'System uptime' | cut -d\" -f6 | awk -F\m '{print $1"m"}'

Verwenden Sie die Tuptime-CSV-Ausgabe, um es einfach zu analysieren, die Zielzeile abzugleichen, das Feld auszuschneiden und den Text vor „m“ zu extrahieren.

verwandte Informationen