Ein BASH-Skript, das den Inhalt des Verzeichnisses kopiert, solange die durchschnittliche Systemlast niedrig ist?

2

Aus Gründen, auf die ich nicht eingehen möchte, muss ich Verzeichnisse kopieren, solange die durchschnittliche Systemlast niedrig ist. Kann mir jemand beim Schreiben eines BASH-Skripts helfen, das den Inhalt eines Verzeichnisses kopiert? Überprüfen Sie jedoch, ob die durchschnittliche Systemlast vor dem Kopieren der einzelnen Dateien unter X liegt, und warten Sie andernfalls Y Sekunden und versuchen Sie es erneut.

Notwendig
quelle
@akira: "So lange wie" ist genauso gültig wie "so lange wie" (auch, warum hast du es im Hauptteil der Frage geändert, aber nicht im Titel?).
Dennis Williamson
@dennis: habe es dort nicht gesehen. Ich werde es zurückrollen.
Akira

Antworten:

2

Es gibt eine Option rsync, die die E / A-Bandbreite begrenzt:

--bwlimit = KBPS limit I / O Bandbreite; KB pro Sekunde
Dennis Williamson
quelle
1

Nur zum Spaß (und ja, ich weiß, dass es nicht versucht, die Datei erneut zu kopieren, falls sie in den Ruhemodus wechselt. Ich werde dies zu Ihrer eigenen Unterhaltung belassen. Wenn Sie über "$ @" gehen, fällt Ihnen das + Verschieben ein ):

#! / bin / bash

für i in datei1 datei2 datei3 etc
machen

    LOAD = $ (Uptime | awk '{sub (/,.*/, "", $ 9); print $ 9 * 100.0}')

    if [$ LOAD -lt 85]
    dann
        echo "copy $ i to wherever"
    sonst
        echo "sleep since load is $ LOAD"
        Schlaf 5
    fi 
getan

Wenn Sie den Last-Durchschnitt der letzten Minute verwenden und nur dann kopieren, wenn das System zu 85% im Leerlauf ist, wird etwas getan.

auf jeden fall würde ich nur rsync mit throtteling (wie dennis erwähnt) verwenden und dem rsync-prozess (wie zoredache erwähnt) einen hohen netten wert (gleichbedeutend mit niedriger priorität) zuweisen und das os die zeitplanung ausführen lassen (was genau darauf ausgelegt ist) ).

Akira
quelle