GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash:Warten Sie, bis die CPU-Auslastung unter einen Schwellenwert fällt

Sie könnten eine Funktion verwenden, die auf top basiert Dienstprogramm. Beachten Sie jedoch, dass dies nicht sehr zuverlässig ist, da sich die CPU-Auslastung jederzeit schnell ändern kann. Das heißt, nur weil die Prüfung erfolgreich war, ist nicht garantiert, dass die CPU-Auslastung niedrig bleibt, solange der folgende Code ausgeführt wird. Sie wurden gewarnt.

Die Funktion:

function wait_for_cpu_usage {
    threshold=$1
    while true ; do
        # Get the current CPU usage
        usage=$(top -n1 | awk 'NR==3{print $2}' | tr ',' '.')

        # Compared the current usage against the threshold
        result=$(bc -l <<< "$usage <= $threshold")
        [ $result == "1" ] && break

        # Feel free to sleep less than a second. (with GNU sleep)
        sleep 1
    done
    return 0
}

# Example call
wait_for_cpu_usage 25

Beachten Sie, dass ich bc -l verwende für den Vergleich, da top die CPU-Auslastung als Float-Wert ausgibt.


wait_for_cpu_usage()
{
    current=$(mpstat 1 1 | awk '$12 ~ /[0-9.]+/ { print int(100 - $12 + 0.5) }')
    while [[ "$current" -ge "$1" ]]; do
        current=$(mpstat 1 1 | awk '$12 ~ /[0-9.]+/ { print int(100 - $12 + 0.5) }')
        sleep 1
    done
}

Beachten Sie, dass das sysstat-Paket installiert sein muss.


Eine viel effizientere Version ruft einfach mpstat auf und awk jeweils einmal und lässt sie beide laufen, bis sie fertig sind; keine Notwendigkeit, explizit sleep und starten Sie beide Prozesse jede Sekunde neu (was sich auf einer eingebetteten Plattform zu einem messbaren Overhead summieren könnte):

wait_until_cpu_low() {
    awk -v target="$1" '
    $13 ~ /^[0-9.]+$/ {
      current = 100 - $13
      if(current <= target) { exit(0); }
    }' < <(LC_ALL=C mpstat 1)
}

Ich verwende $13 hier, weil dort idle % ist ist für meine Version von mpstat; entsprechend ersetzen, wenn Ihre anders ist.

Dies hat den zusätzlichen Vorteil, dass Gleitkomma-Berechnungen korrekt ausgeführt werden, anstatt für Shell-native Berechnungen auf Ganzzahlen runden zu müssen.


Linux
  1. So begrenzen Sie die CPU-Auslastung eines Prozesses in Linux

  2. CPU-Auslastung im Shell-Skript abrufen?

  3. So erhalten Sie die CPU-Auslastung

  4. Bash:Schleife, bis der Befehlsausgangsstatus gleich 0 ist

  5. Wie protokolliere ich die CPU-Nutzung pro Prozess?

Bash bis Loop

So zeigen Sie die CPU-Auslastung über die Befehlszeile an

So erhalten Sie die CPU-Auslastung eines einzelnen Prozesses in Linux

Steuern Sie die RAM- und CPU-Nutzung durch Kodi in Echtzeit

Detaillierte Liste der Ressourcennutzung

So überprüfen Sie die Linux-CPU-Auslastung oder -Auslastung