Dateien in /tmp löschen die älter sind als xxx

stefkey

Member
Hallo,

in meinem Debian vServer sammeln sich im Verzeichnis /tmp Dateien mit Namen sess_* und cache_* an.
Diese werden nicht automatisch gelöscht. Nun dachte ich die Löschung kann ein cronjob übernehmen. Aber ist das normal das ich solche Dateien mit einem selbsterstellten cron löschen muss, oder gibt es den Cron bereits der vlt nur nicht aktiviert ist?

Mein cron sähe so aus:
Code:
0 4 * * * find -P "/tmp" -maxdepth 1 -type f \( -name 'sess_*' \) -ctime +1  -exec rm -fr {} \;
10 4 * * * find -P "/tmp" -maxdepth 1 -type f \( -name 'cache_*' \) -ctime +1  -exec rm -fr {} \;
 
Sollen wir raten welche Anwendung/Dienst du verwendest? Wir können dir wohl kaum Auskunft über Software geben, die du einsetzt, wenn wir noch nicht einmal wissen welche Software du einsetzt. Sicher gibt es Anwendungen die z.B. cronjobs anlegen, damit z.B. alte Datensätze entfernt werden.
 
Wenn es sich um Session-Dateien von PHP handelt, sollte der Cronjob unter /etc/cron.d/php5 diese eigentlich bereinigen
 
Und bevor Du Dich da selber rumspielst: tmpreaper ;)

Die dort erwähnten Sicherheitshinweise solltest Du auf jeden Fall lesen, auch wenn Du diese Software nicht einsetzen möchtest!


MfG Christian
 
Und wenn Dir die vorigen Antworten nicht zusagen:
Die Crons lassen sich zusammenfassen, kürzen und sicherer gestalten:
Code:
0 4 * * * find /tmp/ -type f -maxdepth 1 \( -name 'sess_*' -or -name 'cache_*' \) -ctime +1  -exec rm -f -- {} \;
Oft effektiver:
Code:
0 4 * * * find /tmp/ -type f -maxdepth 1 \( -name 'sess_*' -or -name 'cache_*' \) -ctime +1  -print0 | xargs -0 rm
 
Der Vorschlag von Joe unterscheidet sich dahingehend, dass xargs soviele Argumente an den Befehl rm schickt wie es geht. Sind es zuviele, wird der Befehl wieder mit den restlichen Argumenten aufgerufen.

Das -exec in find bewirkt, dass für jeden Treffer der Befehl rm gestartet wird. Das ist ein kleiner Unterschied ob ein ein Programm nur 2 mal starten muss oder 30.000 mal hintereinander.
 
Das -exec in find bewirkt, dass für jeden Treffer der Befehl rm gestartet wird. Das ist ein kleiner Unterschied ob ein ein Programm nur 2 mal starten muss oder 30.000 mal hintereinander.

Es gibt, zumindest beim GNU find, davon eine Variante ohne xargs:

Code:
find /tmp/ -maxdepth 1 -type f \( -name 'sess_*' -or -name 'cache_*' \) -ctime +1  -exec rm -f -- {} \+

Man beachte das + anstelle von ;

Mit dem + baut find auch eine Argumentenliste auf.

Edit: maxdepth vor type, da find sonst meckert.
 
Last edited by a moderator:
Code:
-exec rm -f -- {} \+
Ich hatte es mal irgendwann gelesen und dann sofort wieder verdrängt.

Da kommen gleich die GNU != *nix Beschwerden :-D
Was die Kompatibilität angeht, ist mir das ziemlich egal. Auf sowas nehme ich schon lange keine Rücksicht mehr.

Ich versuche dieses Konstrukt zu vermeiden. Bei xargs kann ich wenigstens in einer eigenen Manpage nachsehen, wie ich den Befehl beeinflussen kann. Besser als in der Manpage von find suchen zu müssen, wenn man sich an \+ nicht mehr erinnern kann.
 
Back
Top