Ich versuche, einen Befehl zu schreiben, der die kontinuierliche Ausgabe eines freien Befehls (wird jede Sekunde ausgeführt) an einen awk-Befehl weiterleitet, der einen bestimmten Wert (verfügbaren freien Speicher) analysiert und diesen in eine Datei mit einem Zeitstempel ausgibt. Hier sind meine aktuellen Versuche mit dem Befehl:
free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 }' >>memOut
Und alternativ nach ein bisschen googeln
free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 >>"memOut"}'
Jeder Lauf erzeugt leere Dateien. Irgendwelche Vorschläge oder möglicherweise andere Methoden?
Für alte Versionen müssen
awk
Sie möglicherweise verwendensystem("")
.Eigentlich
fflush(stdout)
ist nur für aktuelle Versionen vonawk
undgawk
, wie es nur im POSIX-Standard seit Dezember 2012 ist.Beachten Sie, dass bei Verwendung von
system("")
Flushes für jeden Dateideskriptor die vollständige Beschreibung imgawk
Handbuch, Abschnitt "9.1.4 Eingabe- / Ausgabefunktionen", enthalten ist.quelle
Nur um sicherzustellen, dass Sie das bekommen, was Sie tatsächlich wollen und nicht das, was Sie speziell gefragt haben.
Wenn Sie den verfügbaren Speicher auf dem System für Programme kennen möchten, ist dies möglicherweise besser geeignet:
Die Spalte Verwendet in der Mem-Zeile enthält Caches und Puffer. In den meisten Fällen sollten diese zumindest notiert werden, wenn Sie die Speichernutzung für einen bestimmten Computer / eine bestimmte Aufgabe überwachen möchten.
quelle
In bestimmten Versionen von
awk
(z. B. mawk 1.3.3) müssen Sie das-W interactive
Befehlszeilenflag hinzufügen , um den ungepufferten Betrieb mit Pipes zu ermöglichen.quelle