2016-05-23 7 views
0

Ich versuche ein Shell-Skript zu schreiben, das die Ausgabe eines anderen Skripts in eine Datei schreibt und es bis zu einem gewissen Punkt weiterschreibt zeigen und dann wird die Datei überschrieben, so dass die Dateigröße in einem gut begrenzten Bereich bleibt.Shell Script, um bis zu einem bestimmten Punkt in eine Datei zu schreiben und dann die Datei zu überschreiben

Ich habe versucht, Endlosschleife und Schlaf so zu verwenden, dass es diese Datei überschreiben wird.

Aber es zeigt ein anderes Verhalten. Bis der Punktbefehl ausgeführt wird, nimmt die Dateigröße zu. Aber wenn ich den Befehl stoppe, wird die Dateigröße reduziert.

Wie kann ich die gleiche Datei weiterhin überschreiben und die Dateigröße beibehalten?

+0

vielleicht könnten Sie teilen, was runscript.sh tut? Es ist aus meiner Vorstellung heraus. –

+0

Er erzeugt einfach fortlaufende Protokolle. –

+0

also runscript.sh selbst ist Endlosschleife? Kann es so programmiert sein? Warum sollte es nicht? –

Antwort

0

Ich werde tun, mit folgenden Skript

#!/bin/sh 

Logfile=test.txt 
minimumsize=100000 # define the size you want 
actualsize=$(wc -c <"$Logfile") 
if [[ $actualsize -ge $minimumsize ]]; then 
    rm -rf "$Logfile" 
    sh ./runscript.sh >> test.txt 
else 
    #current_date_time="`date +%Y%m%d%H%M%S`"; #add this to runscript.sh to track when it was written 
    #echo "********Added at :$current_date_time ********" #add this to runscript.sh to track when it was written 
    sh ./runscript.sh >> test.txt 
fi 
+0

Ich ändere die Mindestgröße = 1000. Aber es erzeugt immer noch die Datei mit der Größe '23839 24. Mai 11:24 test.log', Sobald ich das Skript zu stoppen, Dateigröße reduzieren. Wie kann ich dies ändern, um eine neue Datei zu generieren, sobald die Mindestgröße erreicht ist, und die alte löschen. –

+0

@shubhamdeodia Ich verstehe das Problem, wenn einzelne Ausführung von runscript.sh verursacht, dass die Dateigröße> 1000 geht, dann entfernen wir die Datei nicht. Es wird nur das nächste Mal der Ausführung des Skripts überprüfen – Mowgli

+0

@shubhamdeodia Ein anderer Ansatz, den ich mir vorstellen kann, ist schreiben einen Code, um die Dateigröße in runscript.sh rekursiv zu überwachen und wenn es das Limit erreicht, bereinigen Sie die Datei und fahren Sie mit Ihrem Skript fort. – Mowgli

0

Verwendung truncate -s <size> <file> die Datei schrumpfen, wenn seine Größe aus Ihrer Grenze ist

0

Ich kann mit der Option versuchen, die neue Datei, sobald die für die Erzeugung alt ist ist voll. ... Wie kann das Skript die neue Datei erzeugen und darauf schreiben.

Das folgende Skript, nennen wir es chop.sh, tut das; Sie verwenden es, indem Sie die Ausgabe dorthin eingeben und die gewünschte Dateigröße und den Namen als Argumente angeben, z. G. ./runscript.sh|chop.sh 999999 test.txt.

File=${2?usage: $0 Size File} 
Size=$1 
while 
    set -- `ls -l "$File" 2>/dev/null` # 5th column is file size 
    [ "$5" -lt "$Size" ] || mv "$File" "$File"-old 
    read -r && echo "$REPLY" >>"$File" 
do : 
done 

Die alte (voll) Datei würde dann test.txt-old benannt werden.

Verwandte Themen