Umleiten der iostat-Ausgabe in eine Datei
Frage
Warum die Ausgabe von iostat im folgenden Befehl nicht in die Datei umgeleitet wird:
iostat -x 3 | awk '/sda/ { print $11, $12}' > /tmp/disk_utilization
Verhält sich iostat anders als jeder andere Befehl?
Danke im Voraus
Lösung
Sieht so aus, als müssten Sie einen Zähler hinzufügen, um dem Stream mitzuteilen, wann er beendet werden soll( Mann Iostat ).Sie fügen nur das Intervall hinzu:
If the interval parameter is specified without the count parameter, the iostat command generates reports continuously.
Wenn ich es versuche:
iostat -x 3 6 | awk '/sda/ { print $11, $12}' > outfile
Die 6
erzählt iostat
nach 6 Iterationen in 3-Sekunden-Intervallen anzuhalten.Nach den Iterationen iostat
ist abgeschlossen und ich erhalte eine output
Datei.
Alternativ können Sie einen Ausdruck auswählen, um das Beenden des awk-Skripts zu veranlassen.Wenn ich es versuche:
iostat -x 3 | awk -v max=10 '/sda/ { print $11, $12; max++ } NR > max { exit } ' > outfile2
Ich bekomme nur 3 Zeilen rein output2
was Sinn macht, weil iostat -x
erzeugt Ausgabezeilen im Wert von etwa einem Bildschirm auf dem Bildschirm.
Sie können das awk auch dazu zwingen fflush(stdout)
in jedem Druckzyklus:
iostat -x 3 | awk '/sda/ { print $11, $12; fflush(stdout) }' > output3
und dann schließen iostat
mit einem <ctrl+c>
aus der Schale.
Andere Tipps
Die Ursache Ihres Problems liegt darin, dass die Pipe gepuffert ist (wahrscheinlich). 4k
), wenn Sie also lange genug warten, bis die Ausgabe in die Datei geschrieben wird, ist diese nicht mehr leer.