Alles unter /dev/shm/ bleibt im RAM und wird nicht auf Platte geschrieben.
Die Platten performance willst du dir doch nicht durch das unnötige Schreiben eines Logfiles ausbremsen, oder?
Starte kurz vor deinem dd/pv Befehl mit start-stop-daemo ein zwotes Script.
Gib ein pidfile an, so wie z.B. in /etc/init.d/ssh es gemacht wird.
Im zwoten Script kannst du mit einem while true nach einer Wartezeit von ca. 10 Sekunden das Logfile einkürzen, so wie ich es oben schrieb.
Wenn der dd/pv Befehl in der subshell vom 1. Script fertig ist, schießt du ihn elegant mit start-stop-daemo wieder ab. Mehr Mühe würde ich nicht darauf verwenden.
[solved] Mittels 'pv' den Fortschritt in Logdatei schreiben
- pangu
- Beiträge: 1400
- Registriert: 15.11.2011 20:50:52
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: /proc/1
Re: [solved] Mittels 'pv' den Fortschritt in Logdatei schrei
wozu? damit würde ich die doppelte Zeilen entfernen, aber das ist ja immer noch nicht das, was ich ursprünglich haben wollte. Bitte versteh mich nicht falsch, ich bin für jeden Tip dankbar. Mir gehts aber nicht immer nur darum, das Ziel zu erreichen, sondern ich möchte dabei immer auch was lernen WIE man es macht und welche Möglichkeiten es gibt und welche am elegantesten/saubersten sind. Um zurück zum Thema zu kommen: mit uniq würde ich doppelte Zeilen vermeiden, dadurch krieg ich aber trotzdem im output file Ausgaben wie:ThorstenS hat geschrieben:und lass periodisch ein "uniq /dev/shm/monitor.unsorted > /dev/shm/monitor.sorted" laufen.
das wären halt maximal 100 Zeilen, aber das sind eben 99 Zeilen zu viel und überflüssig IMHO. Ich find das nicht sauber genug. Nehmen wir mal theoretisch an, es gäbe einen Praxisfall indem hier counterwise von 1-9999999999999 Zahlen hochgezählt würden. Das wäre eine Datenflut und nicht vertretbar. Daher: ich möchte definitiv immer nur die letzte Zeilenausgabe angezeigt, bzw. geloggt bekommen haben.1
2
3
4
5
6
[...usw]
danke für die Einsicht in dein Skript, aber da nutze ich lieber ganz komfortabel den Befehl 'time'ThorstenS hat geschrieben:Achja, falls du Start und Endzeit mitloggen willst...
Hab diesen Befehl einfach über eine monitor.unsorted drübergejagt, aber die blieb unverändert ??ThorstenS hat geschrieben:sed kann dir die Datei auch periodisch zurechtstutzen, laut http://www.catonmat.net/blog/sed-one-li ... art-three/ machst du dann einfach ein "sed -i '$!N; /^\(.*\)\n\1$/!P; D' /dev/shm/monitor.unsorted"
Zuletzt geändert von Meillo am 21.11.2013 09:37:23, insgesamt 1-mal geändert.
Grund: BB-Tags repariert
Grund: BB-Tags repariert
Man gibt Geld aus, das man nicht hat, um damit Dinge zu kaufen, die man nicht braucht, um damit Leute zu beeindrucken, die man nicht mag.
Re: [solved] Mittels 'pv' den Fortschritt in Logdatei schrei
Man koennte das inreinpipen, das wuerde immer genau eine Zeile lesen und alles in $statusfile damit ueberschreiben.
Gruss Cae
Code: Alles auswählen
| while read -r line; do printf '%s\n' "$line" >"$statusfile"; done
Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
- pangu
- Beiträge: 1400
- Registriert: 15.11.2011 20:50:52
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: /proc/1
Re: [solved] Mittels 'pv' den Fortschritt in Logdatei schrei
klappt irgendwie auch nicht Cae, ich vermute einfach deswegen, weil ja pv das irgendwie buffered und dann erst ausgibt. Das ist ja keine Schleife die dort abläuft, oder nicht? oder hab ich das einfach nur falsch interpretiert und den Befehl falsch konstruiert? Ich habs so versucht gehabt:
Code: Alles auswählen
(dd if=/dev/zero bs=16384 count=131072 | pv -n -p -t -e -r -a -s 2G | dd of=/dev/null) | while read -r line; do printf '%s\n' "$line" 2>test.monitor; done
Man gibt Geld aus, das man nicht hat, um damit Dinge zu kaufen, die man nicht braucht, um damit Leute zu beeindrucken, die man nicht mag.
Re: [solved] Mittels 'pv' den Fortschritt in Logdatei schrei
Die Umleitung von stderr ist an der verkehrten Stelle, printf schreibt ja schon nach stdout. So sollte es tun:
Gruss Cae
Code: Alles auswählen
( dd ... | pv ... ) 2>&1 | while read ... printf ... >test.monitor; done
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
Re: Mittels 'pv' den Fortschritt in Logdatei schreiben
(Ich habe den Thread nur ueberflogen, nicht aber im Detail gelesen. Mir scheint, dass vieles schon gesagt worden ist, aber die Klarheit beim uniq-Hinweis hat mir noch gefehlt.)
pangu hat geschrieben: Der Einzeiler sieht dann also so aus (für meinen Test):Code: Alles auswählen
(dd if=/dev/zero bs=$bs count=$((4294967296 / $bs)) | pv -n -p -t -e -r -a -s 4G | dd of=/dev/null) >test.monitor 2>&1
Du willst verhindern, dass doppelte, identische Zeilen erscheinen? Dann pipe durch uniq(1). Das unterdrueckt Zeilen, die identisch mit der vorherigen Zeile sind.EDIT: Das einzige was noch blöd ist, daß ca. 2x in der Sekunde eine neue Zeile geschrieben wird. Das bedeutet, daß im Outputfile so was drinstehen wird beim Klonen einer 2TB Platte:
0
0
0
0
0
0
0
0
0
...und nach Stunden immer noch hunderte/tausende Zeilen mit diesen Nullen
5
5
5
5
5
5
5
5
5
5
5
5
...und so weiter...Wie könnte man das unterbinden, so daß KEINE neue Zeile verwendet wird ?
Code: Alles auswählen
(dd if=/dev/zero bs=$bs count=$((4294967296 / $bs)) | pv -n -p -t -e -r -a -s 4G | dd of=/dev/null) 2>&1 | uniq >test.monitor
Use ed once in a while!