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

Aus kvwmap
Wechseln zu: Navigation, Suche
(Tmp Verzeichnis von MapServer leeren)
 
(Eine dazwischenliegende Version des gleichen Benutzers 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
--[[Benutzer:Markus Hentschel|Markus Hentschel]] 12:08, 27. Apr 2007 (CEST) Unter SuSE 10.0 funzt es auch.
+
find ${TMP_DIR} -mtime +${AGE} ! -path ${TMP_DIR} -exec rm -rf {} +
 
+
--[[Benutzer:Pkorduan|Pkorduan]] 12:47, 28. Mai 2008 (CEST)
+
In der [http://mapserver.gis.umn.edu/docs/reference/systemmanage/systemmanage MapServer Doku] findet man die Lösung für Linux und Windows. Mit Pfad zum temp Verzeichnis des Webservers ist der, der in der config.php der Konstante IMAGEPATH zugewiesen ist. Bei Änderungen also auch diesen Befehl anpassen. In der deutschen Version übrigens nicht echo Y sondern J, denn der Befehl del erwartet auf die Frage: Möchten Sie "C:\Pfad\zu\ms4w\tmp\ms_tmp Ja (J) oder Nein (N) und nicht Yes or Not (Y/N)
+
 
+
# Linux
+
  find /path/to/webserver/tmp/ ! -type d -exec rm {} \;
+
 
+
  # Windows hier ms4w
+
  cd C:\Pfad\zu\ms4w\tmp\ms_tmp
+
  echo J | del *.*
+

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 {} +