Discussion:
Verzeichnis unter /tmp beim Neustart/Aufräumen nicht löschen
(zu alt für eine Antwort)
Volker Boehm
2007-11-05 09:29:31 UTC
Permalink
Hallo,
ich habe eine (Web-)Anwendung, die in einem Verzeichnis unter /tmp temporäre
Dateien ablegt (/tmp/irgendwas/...). Damit die Dateien dort erstellt werden
können, muss das Verzeichnis /tmp/irgendwas natürlich existieren. Tut es
auch, wenn ich es anlege. Nur werden bei jedem Systemstart alle Dateien und
Verzeichnisse aus /tmp gelöscht und damit gibt's dann das Problem, dass die
temporären Dateien nicht mehr geschrieben werden können. Das Ganze passiert
auf einem Debian stable; unter früheren Betriebssystem-Versionen wurden nur
Dateien von /tmp entfernt, keine Verzeichnisse.

Deshalb meine Frage:
Gibt es entweder einen offiziellen Weg bestimmte Verzeichnisse vom Aufräumen
in /tmp auszuschließen oder wo kann ich ein Skript einhängen oder ein
bestehendes ergänzen, so dass nach einer solchen Aufräum-Aktion das
benötigte Verzeichnis wieder erstellt wird?

mfg Volker
--
Volker Böhm Tel.: +49 4141 981152 www.vboehm.de
Voßkuhl 5 Fax: +49 4141 981154
D-21682 Stade mailto:***@vboehm.de
Christian Schneider
2007-11-05 09:35:37 UTC
Permalink
Thus spake Volker Boehm (***@vboehm.de):
[ /tmp wird bei jedem Neustart geloescht ]
Post by Volker Boehm
Gibt es entweder einen offiziellen Weg bestimmte Verzeichnisse vom Aufräumen
in /tmp auszuschließen oder wo kann ich ein Skript einhängen oder ein
bestehendes ergänzen, so dass nach einer solchen Aufräum-Aktion das
benötigte Verzeichnis wieder erstellt wird?
Kommt auf die eingesetzte Distribution an; meist wird /tmp durch ein
init-Script mit "rm -rf /tmp/*" (oder aehnlichem) geloescht. Lies die
Dokumentation Deiner Distribution, sie nach welche Scripte beim Booten
abgearbeitet werden und ueberpruefe diese.
--
{ \|/ ______ \|/ Access denieded | Christian 'strcat' Schneider }
{ "@' / , . \ `@" Nah Nah Nah :p | http://www.strcat.de/ }
{ /__| \____/ |__\ | http://www.strcat.de/blog/ }
{ \___U__/ | http://strcat.de/chris.gpg }
Volker Boehm
2007-11-05 11:33:24 UTC
Permalink
Post by Christian Schneider
[ /tmp wird bei jedem Neustart geloescht ]
Post by Volker Boehm
Gibt es entweder einen offiziellen Weg bestimmte Verzeichnisse vom
Aufräumen in /tmp auszuschließen oder wo kann ich ein Skript einhängen
oder ein bestehendes ergänzen, so dass nach einer solchen Aufräum-Aktion
das benötigte Verzeichnis wieder erstellt wird?
Kommt auf die eingesetzte Distribution an; meist wird /tmp durch ein
init-Script mit "rm -rf /tmp/*" (oder aehnlichem) geloescht. Lies die
Dokumentation Deiner Distribution, sie nach welche Scripte beim Booten
abgearbeitet werden und ueberpruefe diese.
Das dürfte in diesem Fall das Skript /etc/init.d/bootclean sein und das
lautet nicht nur 'rm -rf /tmp/*' sondern ist ein 197 Zeilen großer Wälzer,
mit etlichen Funktionen, für dessen Studium man sich einen Vormittag frei
nehmen müßte.

Deshalb fragte ich nach einer _offiziellen_ Möglichkeit; ich habe keine Lust
hier etwas zu ändern, dabei noch was mit dem Hintern umzureissen, weil ich
das Skript dann doch nicht ganz kapiert habe, und beim nächsten 'apt-get
upgrade' wird meine Änderung wieder übergemüllert, ohne das ich es merke.

Ich könnte mir auch andere wilde Lösungen ausdenken, wie einen cron-Job, der
alle 5 Minuten das Verzeichnis erstellt, aber wer so einen - ich hätte
beinahe gesagt: Schwachsinn - macht, wie Verzeichnisse von /tmp löschen,
müsste doch auch einen Mechanismus bereitstellen, um das zu umgehen.

Ich könnte auch die temporären Dateien irgendwo in die Pampa
legen; /home/tmp/irgendwo wäre da ein hübscher Ort :-). Aber irgendwie
gehören temporäre Dateien für mich in /tmp und seine Unterordner.

Zumindest suche ich erst einmal einen systemkonformen Weg, bevor in so
wildem Gebastel Zuflucht suche.

mfg Volker
--
Volker Böhm Tel.: +49 4141 981152 www.vboehm.de
Voßkuhl 5 Fax: +49 4141 981154
D-21682 Stade mailto:***@vboehm.de
Alexander Skwar
2007-11-05 11:45:12 UTC
Permalink
Post by Volker Boehm
Ich könnte mir auch andere wilde Lösungen ausdenken, wie einen cron-Job,
der alle 5 Minuten das Verzeichnis erstellt, aber wer so einen - ich hätte
beinahe gesagt: Schwachsinn - macht, wie Verzeichnisse von /tmp löschen,
müsste doch auch einen Mechanismus bereitstellen, um das zu umgehen.
Hm, IMO ist's eher Schwachsinn, wenn die Applikation annimmt, das es
irgendwas in /tmp gäbe. Das hört sich buggy an. Ändere dies doch!

Im übrigen würde ich solche temporären Dateien dann auch eher unter
/var/tmp anlegen, denn /var/tmp wird in aller Regel nicht einfach
so geleert.

Alexander
Florian Diesch
2007-11-05 18:08:34 UTC
Permalink
Post by Volker Boehm
Post by Christian Schneider
[ /tmp wird bei jedem Neustart geloescht ]
Post by Volker Boehm
Gibt es entweder einen offiziellen Weg bestimmte Verzeichnisse vom
Aufräumen in /tmp auszuschließen oder wo kann ich ein Skript einhängen
oder ein bestehendes ergänzen, so dass nach einer solchen Aufräum-Aktion
das benötigte Verzeichnis wieder erstellt wird?
Kommt auf die eingesetzte Distribution an; meist wird /tmp durch ein
init-Script mit "rm -rf /tmp/*" (oder aehnlichem) geloescht. Lies die
Dokumentation Deiner Distribution, sie nach welche Scripte beim Booten
abgearbeitet werden und ueberpruefe diese.
Das dürfte in diesem Fall das Skript /etc/init.d/bootclean sein und das
lautet nicht nur 'rm -rf /tmp/*' sondern ist ein 197 Zeilen großer Wälzer,
mit etlichen Funktionen, für dessen Studium man sich einen Vormittag frei
nehmen müßte.
Deshalb fragte ich nach einer _offiziellen_ Möglichkeit; ich habe keine Lust
hier etwas zu ändern, dabei noch was mit dem Hintern umzureissen, weil ich
das Skript dann doch nicht ganz kapiert habe, und beim nächsten 'apt-get
upgrade' wird meine Änderung wieder übergemüllert, ohne das ich es merke.
In Ubuntu 7.10 kannst du in /etc/default/rcS in der Variablen TMPTIME
angeben, wie alt Dateien sein müssen, um gelöscht zu werden. Bei
nagtiven Zahl, infinite oder infinity werden keine Dateien (außer
.X*-lock) gelöscht.
Post by Volker Boehm
Ich könnte mir auch andere wilde Lösungen ausdenken, wie einen cron-Job, der
alle 5 Minuten das Verzeichnis erstellt, aber wer so einen - ich hätte
beinahe gesagt: Schwachsinn - macht, wie Verzeichnisse von /tmp löschen,
müsste doch auch einen Mechanismus bereitstellen, um das zu umgehen.
Aus "man hier":
/tmp This directory contains temporary files which may be deleted
with no notice, such as by a regular job or at system boot up.


Der Fehler liegt also bei der Webanwendung und sollte bevorzugt auch
dort repariert werden: Entweder legt sie das Verzeichnis bei Bedarf neu
an, oder sie benutzt ein anderes Verzeichnis, z.B. /var/tmp.
Idealerweise beides.



Florian
--
<http://www.florian-diesch.de/>
-----------------------------------------------------------------------
** Hi! I'm a signature virus! Copy me into your signature, please! **
-----------------------------------------------------------------------
Marcus Jodorf
2007-11-05 22:58:38 UTC
Permalink
/tmp This directory contains temporary files which may be deleted
with no notice, such as by a regular job or at system boot up.
Oder um es noch einfacher auszudrücken:
Der FHS (Filesystem Hierarchy Standard) gibt explizit vor:
„Programs must not assume that any files or directories in /tmp are
preserved between invocations of the program.“

Und hängt noch als immerhin recommendation hinten dran:
„Although data stored in /tmp may be deleted in a site-specific manner,
it is recommended that files and directories located in /tmp be deleted
whenever the system is booted.“

wobei das auch noch als common practice erkannt wird und dazu noch
einmal auf POSIX verwiesen wird, wo es ähnlich festgelegt wird.

Oder um es nochmal noch einfacher auszudrücken: /tmp beim booten oder gar
zwischendurch platt zu machen ist sowohl für linuxoide (FHS) als auch
unixoide allgemein (POSIX) ganz normal, in grundlegenden Standards
so dokumentiert und auch vollkommen traditionell.
Der Fehler liegt also bei der Webanwendung und sollte bevorzugt auch
dort repariert werden: Entweder legt sie das Verzeichnis bei Bedarf
neu an, oder sie benutzt ein anderes Verzeichnis, z.B. /var/tmp.
Idealerweise beides.
Ein kaputtes Programm ist ein kaputtes Programm. Ich frage mich
nur den ganzen Thread schon, wie man überhaupt auf die Idee kommt, in
/tmp was permanent speichern zu wollen. Sowas kann doch einem
Programmierer mit Minimalerfahrung normalerweise gar nicht
passieren. Spätestens nach dem ersten Reboot hat das doch üblicherweise
auch ein Anfänger auf einem Unixoiden auf die harte Tour gerafft und
spätestens dann nach Dokusichtung ein Aha-Erlebnis.
Oder ist die „Webanwendung“ möglicherweise eine verunglückte Portierung
von einem nicht-unixoiden System oder sonstwas sehr seltsames?


Gruß,

Marcus
Heike C. Zimmerer
2007-11-05 10:55:18 UTC
Permalink
Das Ganze passiert auf einem Debian stable; unter früheren
Betriebssystem-Versionen wurden nur Dateien von /tmp entfernt, keine
Verzeichnisse.
War das so? Das ist mir nie aufgefallen.
Gibt es entweder einen offiziellen Weg bestimmte Verzeichnisse vom Aufräumen
in /tmp auszuschließen
Das wohl nicht.
oder wo kann ich ein Skript einhängen oder ein bestehendes ergänzen,
so dass nach einer solchen Aufräum-Aktion das benötigte Verzeichnis
wieder erstellt wird?
Das Anlegen muss ja nur irgendwann zwischen dem Löschen von /tmp und
dem Aufruf der Anwendung passieren. Falls Du sie von Hand aufrufst,
wäre ein Wrapper der Art

#!/bin/sh
mkdir -p /tmp/das_verzeichnis
/pfad/zur/Anwendung "$@"

der kleinste Eingriff. Ab dann rufst Du zum Start der Anwendung den
Wrapper (und nicht mehr die Anwendung direkt) auf.

Ansonsten wäre ein Initskript in /etc/init.d wohl der beste Weg, das
während des Bootprozesses aufgerufen wird. Falls Du das möchtest,
müsste sich im Netz unter diesen Stichworten Einiges finden lassen,
und bei Unklarheiten frägst Du einfach nochmal.

Der ganz korrekte Weg wäre übrigens ein Bug-Report für die Anwendung.
Sie kann sich nicht darauf verlassen, dass /tmp bei ihrem Start irgend
einen bestimmten Inhalt behalten hat (oder auch nicht hat). Das ist
immer ein Fehler.
Lutz Frommberger
2007-11-05 11:14:10 UTC
Permalink
einen offiziellen Weg bestimmte Verzeichnisse vom Aufräumen in /tmp
auszuschließen oder wo kann ich ein Skript einhängen oder ein bestehendes
ergänzen, so dass nach einer solchen Aufräum-Aktion das benötigte
Verzeichnis wieder erstellt wird?
tmpreaper sollte das können (TMPREAPER_PROTECT_EXTRA).

Sauber ist das natürlich alles nicht, tmpreaper ist gefährlich,
aber es sollte gehen. Und "offiziell" ist es auch. ;-)

gruß,
--
Lutz Frommberger | "Wenn ist das Nunstück git und
| Slotermeyer? Ja! ... Beiherhund
http://www.aussagekraft.de | das Oder die Flipperwaldt
pgp key on request | gersput." - Ernest Scribbler
frank paulsen
2007-11-05 11:50:56 UTC
Permalink
Post by Volker Boehm
Gibt es entweder einen offiziellen Weg bestimmte Verzeichnisse vom Aufräumen
in /tmp auszuschließen oder wo kann ich ein Skript einhängen oder ein
bestehendes ergänzen, so dass nach einer solchen Aufräum-Aktion das
benötigte Verzeichnis wieder erstellt wird?
nach FHS wird /var/tmp beim reboot nicht aufgeraeumt.

alternativ koennte man wohl ein mkdir in /etc/init.d/bootmisc.sh ablegen.
--
frobnicate foo
Helmut Hullen
2007-11-05 11:56:00 UTC
Permalink
Hallo, Volker,
Nur werden bei jedem Systemstart alle Dateien und Verzeichnisse aus
/tmp gelöscht
Das solltest Du Deinem Betriebssystem abgewöhnen. Eine bessere Lösung
ist z.B. "tmpwatch".

Viele Gruesse!
Helmut
Christian Garbs
2007-11-05 18:03:33 UTC
Permalink
Mahlzeit!
Post by Helmut Hullen
Nur werden bei jedem Systemstart alle Dateien und Verzeichnisse aus
/tmp gelöscht
Das solltest Du Deinem Betriebssystem abgewöhnen. Eine bessere Lösung
ist z.B. "tmpwatch".
Sichert das mein tmpfs, damit es beim nächsten Boot wieder da ist?

Gruß,
Christian
--
....Christian.Garbs.....................................http://www.cgarbs.de
"Don't think of it as being vastly outnumbered," pfloyd
offered. "Think of it as having a very wide shot selection."
(The Long Road - Book Two of Undocumented Features)
Dirk Clemens
2007-11-05 18:53:00 UTC
Permalink
Post by Christian Garbs
Mahlzeit!
Post by Helmut Hullen
Nur werden bei jedem Systemstart alle Dateien und Verzeichnisse aus
/tmp gelöscht
Das solltest Du Deinem Betriebssystem abgewöhnen. Eine bessere Lösung
ist z.B. "tmpwatch".
Sichert das mein tmpfs, damit es beim nächsten Boot wieder da ist?
Das weiß ich nicht, es ignoriert aber die Empfehlungen aller anderen
hier, dass solche dauerhaften Dateien/Verzeichnisse *nicht*
nach /tmp gehören.

Falls die Web-Application kein anderes Data-Dir will,
dann könnte das helfen:

=== start script (untested) ===
# the data directory
data=/var/spool/web-app

# the unwanted temp path
temppath=/tmp/web-app

# create datat direrctory
mkdir -p $data

# create a link
ln -s $data/ $temppath

# start web app
/path/to/web-app __params__
==================

Dirk
--
Mail an: lemmi (minus) usenet (at) ftb (minus) net (dot) de
Helmut Hullen
2007-11-05 20:54:00 UTC
Permalink
Hallo, Christian,
Post by Christian Garbs
Post by Helmut Hullen
Nur werden bei jedem Systemstart alle Dateien und Verzeichnisse aus
/tmp gelöscht
Das solltest Du Deinem Betriebssystem abgewöhnen. Eine bessere
Lösung ist z.B. "tmpwatch".
Sichert das mein tmpfs, damit es beim nächsten Boot wieder da ist?
Nein - meins auch nicht. Aber das wusste ich, als ich für "/tmp" dieses
Dateisystem wählte.

Andererseits räumt "tmpwatch" (auf Wunsch) auch alte Dateien aus "/var/
tmp" weg, nicht nur aus "/tmp". Und das kann recht hilfreich sein.

Viele Gruesse!
Helmut
Juergen Ilse
2007-11-05 22:37:16 UTC
Permalink
Hallo,
Post by Helmut Hullen
Nur werden bei jedem Systemstart alle Dateien und Verzeichnisse aus
/tmp gelöscht
Das solltest Du Deinem Betriebssystem abgewöhnen. Eine bessere Lösung
ist z.B. "tmpwatch".
Warum? /tmp ist nicht dafuer da, Inhalte auch ueber einen reboothinweg
zu erhalten. Software, die sich darauf verlaesst, dass in /tmp Inhalte
einen reboot ueberdauern, ist schlicht fehlerhaft. Das Verzeichnis fuer
temporaere Dateien (und Verzeichnisse) die auch einen reboot ueberdauern
sollen, lautet nicht /tmp sondern /var/tmp.

Tschuess,
Juergen Ilse (***@usenet-verwaltung.de)
--
Ein Domainname (auch wenn er Teil einer Mailadresse ist) ist nur ein Name,
nicht mehr und nicht weniger ...
Lutz Frommberger
2007-11-06 09:50:13 UTC
Permalink
Post by Juergen Ilse
Warum? /tmp ist nicht dafuer da, Inhalte auch ueber einen reboothinweg
zu erhalten. Software, die sich darauf verlaesst, dass in /tmp Inhalte
einen reboot ueberdauern, ist schlicht fehlerhaft. Das Verzeichnis fuer
temporaere Dateien (und Verzeichnisse) die auch einen reboot ueberdauern
sollen, lautet nicht /tmp sondern /var/tmp.
Auch mit fehlerhafter Software muss man manchmal arbeiten...

gruß,
--
Lutz Frommberger | "Wenn ist das Nunstück git und
| Slotermeyer? Ja! ... Beiherhund
http://www.aussagekraft.de | das Oder die Flipperwaldt
pgp key on request | gersput." - Ernest Scribbler
Heiko Schlenker
2007-11-05 12:23:17 UTC
Permalink
Post by Volker Boehm
ich habe eine (Web-)Anwendung, die in einem Verzeichnis unter /tmp
temporäre Dateien ablegt (/tmp/irgendwas/...). Damit die Dateien
dort erstellt werden können, muss das Verzeichnis /tmp/irgendwas
natürlich existieren. Tut es auch, wenn ich es anlege. Nur werden
bei jedem Systemstart alle Dateien und Verzeichnisse aus /tmp
gelöscht und damit gibt's dann das Problem, dass die temporären
Dateien nicht mehr geschrieben werden können.
Das ist ganz eindeutig ein (web-)anwendungsseitiger Mangel. Der oder
die betreffenden Entwickler würden sich über einen Bugreport sicher
freuen.

Gruß, Heiko
--
Neu im Usenet? -> http://www.kirchwitz.de/~amk/dni/
Linux-Anfänger(in)? -> http://www.dcoul.de/infos/
Fragen zu KDE/GNOME? -> de.comp.os.unix.apps.{kde,gnome}
Passende Newsgroup gesucht? -> http://groups.google.com/groups?as_umsgid=dcoul-***@luv.does-not-exist.org
Loading...