lösche Logfile nach 14 Tage

F

flugopa

Hallo,

auch mein Linux produziert sehr viele Logfiles.
Gibt es evtl. ein fertiges Skript welche die Logfiles nach X Tagen löscht?
Ich habe kein gefunden, weshalb ich hier schon mal anfange ein neues Skript zu schreiben.

#!/bin/sh
TAG=$(date +%d)
MONAT=$(date +%m)
JAHR=$(date +%Y)

echo -e "\nKontrollausgabe\t$TAG.$MONAT.$JAHR"

ls -al | grep $MONAT+1 | rm ????

Wer möchte helfen?
 

Du hast sicherlich Recht, aber ich habe mich sicherlich nicht ausreichend artikuliert.

Beispiel:

wir nehmen das Verz. "/var/log/" indem sich sehr viele Logdateien befinden (auch U-Verz.).
Ich möchte alle Dateien die älter als 7 Tage sind löschen.
Logrotate bietet keine Löschfunktion mit an.
Man könnte doch auch ein Cronjob alle 7 Tage aufrufen:

crontab -e
0 23 * * * /TOOLs/clear7.sh
:wq

clear7.sh
#!/bin/sh

1. AKTUELLE_ZEIT=$(date +%s)
2. letzte Filemodifikation (FM_ZEIT) auslesen. Keine Ahnung wie ich das machen soll.
3. if [ $FM_ZEIT < $AKTUELLE_ZEIT - 7 ]; then

(2 + 3 muss natürlich irgendwie verknüpft werden)

Wer hat noch eine Idee?
 
Hallo
Ich wette, dass du dir die Manpage zu logrotate nicht durchgelesen hast.
Sonst wär so ein schlaues Kerlchen wie du darauf gestoßen. ;)

rotate count
Log files are rotated count times before being removed or mailed to the address specified in a mail
directive. If count is 0, old versions are removed rather then rotated.

Als reiner cronjob, könntest du auch eine simples find mit -exec rm ausführen.
Allerdings ist das nicht sicher, wenn z.B. programme zum Zeitpunkt gerade auf diese Dateien zugreift.

Deshalb überlass das lieber logrotate.

Gruß Wolfgang
 
> Ich wette, dass du dir die Manpage zu logrotate nicht durchgelesen hast.
Du hast Recht.

> Sonst wär so ein schlaues Kerlchen wie du darauf gestoßen. ;)
Danke für die Blumen, aber so schlau bin ich nicht, weshalb ich immer Fragen muss.

> Als reiner cronjob, könntest du auch eine simples find mit -exec rm
> ausführen. Allerdings ist das nicht sicher, wenn z.B. programme zum
> Zeitpunkt gerade auf diese Dateien zugreift.
Das ist ein guter Hinweis.

> Deshalb überlass das lieber logrotate.
OK.

Mir geht es auch um andere Verz. und Dateitypen, die ich ebenfalls mit einer Rotation (bist du älter als X Tage) löschen möchte.

Wäre echt stark von Dir, wenn du etwas von deinen Wissen anderen geben könntest.
 
Hallo

Ich gebe mein bescheidenes Wissen gern weiter, wenn es konkrete Fragen zu einem Problem gibt - mit dem sich der Fragesteller selbst auseinandersetzt.
Schließlich ist es ja nur sinnvoll, wenn das Problem durch eigenes erlerntes Wissen gelöst wird.
;)
Wer mag schon die gleiche Frage mehrfach beantworten...

Also zu find :
Wenn du z.B. alle Dateien die älter als 7 Tage sind (ctime) haben willst, um sie an einen Löschbefehl zu verfüttern:
Code:
find /path -tape f -ctime +7
willst du die nun löschen, solltest du vorsichtshalber xargs verwenden, wenn es sehr viele sind.
Sonst bekommst du u.U. Argumentlist to long... als Fehler.
Du kannst natürlich auch gleich loslöschen auf eigene Gefahr!
Wir löschen alle Dateien die auf log enden und älter als 7 Tage sind.
Code:
find /path -type f -name *log -ctime +7 -exec rm -f {} \;

Sei dir bewusst, dass das mit Sonderzeichen im Dateinamen nicht funktionieren wird.
Auch wenn es sehr viele Dateien sind, wird es nicht gehen.

siehe
man find
man xargs

Soviel zum fröhlichen Weitergeben meines bescheidenen Wissens zur Selbsthilfe.

Übrigens kannst du bei Logrotate jegliche Dateien angeben, die du willst.

Gruß Wolfgang
 
Hallo

Ich gebe mein bescheidenes Wissen gern weiter, wenn es konkrete Fragen zu einem Problem gibt - mit dem sich der Fragesteller selbst auseinandersetzt.
Schließlich ist es ja nur sinnvoll, wenn das Problem durch eigenes erlerntes Wissen gelöst wird.
;)
Wer mag schon die gleiche Frage mehrfach beantworten...

Also zu find :
Wenn du z.B. alle Dateien die älter als 7 Tage sind (ctime) haben willst, um sie an einen Löschbefehl zu verfüttern:
Code:
find /path -tape f -ctime +7
willst du die nun löschen, solltest du vorsichtshalber xargs verwenden, wenn es sehr viele sind.
Sonst bekommst du u.U. Argumentlist to long... als Fehler.
Du kannst natürlich auch gleich loslöschen auf eigene Gefahr!
Wir löschen alle Dateien die auf log enden und älter als 7 Tage sind.
Code:
find /path -type f -name *log -ctime +7 -exec rm -f {} \;

Sei dir bewusst, dass das mit Sonderzeichen im Dateinamen nicht funktionieren wird.
Auch wenn es sehr viele Dateien sind, wird es nicht gehen.

siehe
man find
man xargs

Soviel zum fröhlichen Weitergeben meines bescheidenen Wissens zur Selbsthilfe.

Übrigens kannst du bei Logrotate jegliche Dateien angeben, die du willst.

Gruß Wolfgang

Danke schön.


Für andere Anfänger hier meine Crontab zur selbständigen Systempflege:

crontab -e
* 1 * * * /usr/bin/find /etc/samba -name *log -ctime +7 | /usr/bin/xargs rm -f $1
5 1 * * * /usr/bin/find /var/log -name * -ctime +7 | /usr/bin/xargs rm -f $1
 
Danke schön.


Für andere Anfänger hier meine Crontab zur selbständigen Systempflege:

crontab -e
* 1 * * * /usr/bin/find /etc/samba -name *log -ctime +7 | /usr/bin/xargs rm -f $1
5 1 * * * /usr/bin/find /var/log -name * -ctime +7 | /usr/bin/xargs rm -f $1

trotzdem bin ich immernoch der meinung dass das logrotate sauberer macht als "nur" zu löschen :oldman
den einwand dazu hat ja Wolfgang schon geschildert...
 
Genau so ist es.
Wenn du das schon so machst, beschränk dich bei find wenigstens auf die archivierten logs.
Die crontab ist für Neulinge so nicht empfehlenswert.

Gruß Wolfgang
 
trotzdem bin ich immernoch der meinung dass das logrotate sauberer macht als "nur" zu löschen :oldman
den einwand dazu hat ja Wolfgang schon geschildert...

Ich bin ein Anfänger und nehme erstmal Sachen die ich kenne, aber lasse mich sehr gern auf neue Möglichkeiten ein. Leider sehe ich manchmal den Wald vor lauter Bäume nicht.

Wie sieht denn Dein logrotate -Script aus?
Mein Script hat eine Macke. Wenn ich die Zahl auf über 30 setze, ohoh.

Verwende derzeit FC6 (ZOD)
 

Ähnliche Themen

CentOS 5.8 –SQL Abfrage– HTML wird generiert und daraus müssen mehrere Mails versendet werden

Queue für copy Script

Löschscript mit Logging

Last mit etc/passwd anzeigen lassen

Prozess aus eigenem Init script wird gekillt

Zurück
Oben