Andrés Blog

Krams. Und so.

Mär 22, 2016

Shutdownscript Nr. 2

Eine neue Iteration des Shutdownscripts, welches die Shell blockiert, bis kein Traffic mehr fliesst. Diesmal sind alle Einstellmöglichkeiten rausgeworfen worden, da diese zum Teil hinderlich oder unnötig waren. So wird jetzt der Traffic aller Netzwerkschnittstellen summiert und ein fester Schwellwert von 1kb/s ist zu unterschreiten als Mittelwert über 5 Sekunden. Auch ist der Befehl zum Shutdown verschwunden. Einfach das Script mit

scriptname && systemctl suspend

aufrufen, um den gewünschten Effekt zu erzielen ;)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash

# "bash strict mode"
set -euo pipefail
IFS=$'\n\t'

verbose=1

function networkidle() {
    local traffic_last=$(awk '/:/ {if ($1 != "lo:") {SUM += $2}} END {print SUM}' /proc/net/dev)
    while true; do
        sleep 5
        local traffic_now=$(awk '/:/ {if ($1 != "lo:") {SUM += $2}} END {print SUM}' /proc/net/dev)
        local traffic_diff=$(( (${traffic_now} - ${traffic_last}) / 1024 / 5 ))
        local traffic_last=${traffic_now}
        if [[ ${verbose} -ne 0 ]]; then echo "${traffic_diff} kb/s"; fi
        if [[ ${traffic_diff} -le 1 ]]; then
            if [[ ${verbose} -ne 0 ]]; then echo "Traffic below 1 kb/s."; fi
            return
        fi
    done
}

networkidle

Den inoffiziellen "bash strict mode" habe ich übrigens im Blog von Aaron Maxwell gefunden. Werde ich in Zukunft wohl öfters in meine Scripte einbinden.