Wie man Logrotate in Shell-Skripten implementiert


12

test.sh

#!/bin/bash
echo "Hello World"

test2.sh

#!/bin/bash
while true
do
    sh test.sh >> /script_logs/test.log &
done

Ich möchte logrotate implementieren, um die Größe der Protokolldatei zu steuern. Wie kann ich das logrotate implementieren, wenn die oben beschriebene Situation vorliegt?

Antworten:


11
#!/bin/bash 
touch /script_logs/test.log
MaxFileSize=2048
while true
do
     sh test.sh >> /script_logs/test.log
#Get size in bytes** 
    file_size=`du -b /script_logs/test.log | tr -s '\t' ' ' | cut -d' ' -f1`
    if [ $file_size -gt $MaxFileSize ];then   
        timestamp=`date +%s`
        mv /script_logs/test.log /script_logs/test.log.$timestamp
        touch /script_logs/test.log
    fi

done

Ich habe das "&" entfernt, da es ein Problem verursachen kann.


@ Veerendra wir müssen die Logik des Rollens der Protokolle in die Schleife setzen, wie Sie eine Endlosschleife ausführen ..
neugierig

@ Veerendra wir hatten meinen vorherigen Beitrag einen Fehler .. "MV" wird keine neue Datei erstellen, aber Sie können das Skript entsprechend Ihren Anforderungen ändern.
neugierig

Kann ich also anstelle von cpund mvdie Protokolldatei entfernen, wird es dann eine neue Protokolldatei mit demselben Namen sein? (Wenn die Protokolldatei eine bestimmte Grenze erreicht, möchte ich diese Protokolldatei entfernen und anschließend eine neue Datei erstellen )
Veerendra

Sie sollten verwenden >>, um an die Protokolldatei anzuhängen. Sie >wird immer wieder überschrieben.
Alcik

Wenn ich verwende >, erhalte ich tail: test.log: file truncated Hello World!... Wenn ich verwende >>, erhalte ich die richtige Protokollmeldung, aber die Dateigröße nimmt zu. Keine Bedingung Überprüfung der Bedingung ... ;-(
Veerendra

23

wie wäre es mit savelog?

Es ist in Debian und RH und so ziemlich jeder anderen mir bekannten Linux-Distribution verfügbar. Es ist ein / bin / sh-Shell-Skript, sollte also auch auf jedem anderen Unix laufen.

zB bevor etwas geschrieben wird um zu test.loglaufen savelog -n -c 7 test.log. Dadurch bleiben die 7 neuesten nicht leeren Versionen von test.log erhalten. Standardmäßig werden gedrehte Protokolle komprimiert (dies kann jedoch mit deaktiviert werden -l).

Bei Bedarf können Sie die Größe von test.logund nur savelogdann überprüfen , wenn sie über einer bestimmten Größe liegt.


Gibt es eine Idee, in welchem ​​Paket dies unter AWS Linux enthalten ist (ich glaube in der Nähe von CentOS)? Die Standardinstallation enthält kein Savelog. Ich kann es auch nicht mit Standard-Repos von yum finden
Jhonkola

savelog nicht in RHEL 5 gefunden. Wissen Sie, in welchem ​​Repo es sein sollte?
Felipe Alvarez

Keine Ahnung von Centos oder Rhel5-Paketen, aber Sie finden das /usr/bin/savelogShell-Skript unter sources.debian.net/src/debianutils/4.7
cas

2
Ich habe savelogauf keiner meiner RHEL / CentOS 5/6-Boxen etwas gefunden, also habe ich es nur ad hoc heruntergeladen und es scheint für meine Bedürfnisse in Ordnung zu sein.
Dale Anderson

Ein Nachteil savelogist, dass die Datei umbenannt wird, es dann aber lange dauert, bis die alten gzip-Dateien fertig sind. In der Zwischenzeit erhält das .0-Protokoll bereits Einträge für die nächsten Tage. Im Idealfall sollte die Zeit zwischen der Rotation des Protokolls und dem Signalisieren des Prozesses zum erneuten Öffnen des Protokolls minimal sein. Ich deaktiviere savelogdie Komprimierungsfunktion deswegen.
Rustyx

2

Ich habe an diesem Wochenende einen Logrotee geschrieben . Ich würde es wahrscheinlich nicht tun, wenn ich die großartige Antwort vonmultilog @ JdeBP gelesen hätte .

Ich habe mich darauf konzentriert, dass es leichtgewichtig ist und in der Lage ist, seine Ausgabestücke wie folgt zu bzip2:

verbosecommand | logrotee \
  --compress "bzip2 {}" --compress-suffix .bz2 \
  /var/log/verbosecommand.log

Es gibt jedoch noch viel zu tun und zu testen.


0

Da ich der akzeptierten Antwort noch keine Kommentare hinzufügen kann , ein BusyBox- Hinweis, bei dem dukein -bFlag vorhanden ist:

du /var/log/file | tr -s '\t' ' ' | cut -d' ' -f1
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.