Löschen von temporären Dateien: Unterschied zwischen den Versionen

Aus kvwmap
Wechseln zu: Navigation, Suche
 
(Tmp Verzeichnis von MapServer leeren)
 
(3 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Der Mapserver erzeugt eine Vielzahl von temporären Dateien die regelmäßig, mindestens stündlich, gelöscht werden müssen.
+
===tmp-Verzeichnis von MapServer leeren===
Ab einer kritischen Anzahl von ca. 1000 versagt der normale rm-Befehl mit der Meldung "argument list too long"
+
Das Leeren eines Verzeichnisses mag einfach erscheinen.
 +
rm -R /var/www/tmp*
 +
may do the job.
  
Ein Sebastian hat einen [http://www.entwickler-blog.de/archiv/103-Linux-Problem-bash-binrm-Argument-list-too-long.html Vorschlag] gemacht der unter SUSE 9.2 gut funktioniert.
+
Aber so einfach ist das nicht.
 +
1. Handelt es sich um sehr viele Dateien macht der rm Befehl so nicht mit.
 +
2. Es sollen nicht alle Dateien gelöscht werden, sondern nur ältere mit denen nicht mehr gearbeitet wird.
  
Folgendes Skript steht in unserem cron.hourly - Verzeichnis:
+
Daher kommt eher folgender Befehl zur Anwendung:
 
+
find /var/www/tmp -mtime +1 ! -path /var/www/tmp -exec rm -rf {} +
 
+
Hier wird erst alles gelistet was älter als 1 Tag alt und in /var/www/tmp enthalten ist, außer /var/www/tmp selbst.
  #!/bin/sh
+
Anschließend wird es dem rm Befehl übergeben und der löscht nach und nach alles weg. Diese Befehlszeile sollte vorzugsweise ein mal pro Tag innerhalb eines Cronjobs abgearbeitet werden. z.B. jeden Morgen 1:01
  cd /srv/www/htdocs/tmp/
+
1 1 * * * find /var/www/tmp -mtime +1 ! -path /var/www/tmp -exec rm -rf {} +
  find -type f -print0 | xargs -0 rm
+
Die find Befehlszeile kann auch in einem Bash-Script stehen, welches im Verzeichnis /etc/cron.daily abgelegt ist.
exit 0
+
  #!/bin/bash
 +
  TMP_DIR=/var/www/tmp
 +
AGE=1
 +
  find ${TMP_DIR} -mtime +${AGE} ! -path ${TMP_DIR} -exec rm -rf {} +

Aktuelle Version vom 19. März 2018, 15:26 Uhr

tmp-Verzeichnis von MapServer leeren

Das Leeren eines Verzeichnisses mag einfach erscheinen.

rm -R /var/www/tmp*

may do the job.

Aber so einfach ist das nicht. 1. Handelt es sich um sehr viele Dateien macht der rm Befehl so nicht mit. 2. Es sollen nicht alle Dateien gelöscht werden, sondern nur ältere mit denen nicht mehr gearbeitet wird.

Daher kommt eher folgender Befehl zur Anwendung:

find /var/www/tmp -mtime +1 ! -path /var/www/tmp -exec rm -rf {} +

Hier wird erst alles gelistet was älter als 1 Tag alt und in /var/www/tmp enthalten ist, außer /var/www/tmp selbst. Anschließend wird es dem rm Befehl übergeben und der löscht nach und nach alles weg. Diese Befehlszeile sollte vorzugsweise ein mal pro Tag innerhalb eines Cronjobs abgearbeitet werden. z.B. jeden Morgen 1:01

1 1 * * * find /var/www/tmp -mtime +1 ! -path /var/www/tmp -exec rm -rf {} +

Die find Befehlszeile kann auch in einem Bash-Script stehen, welches im Verzeichnis /etc/cron.daily abgelegt ist.

#!/bin/bash
TMP_DIR=/var/www/tmp
AGE=1
find ${TMP_DIR} -mtime +${AGE} ! -path ${TMP_DIR} -exec rm -rf {} +