Seite 1 von 1

User temp verzeichniss...

Verfasst: Mittwoch 13. Juli 2011, 11:34
von jens
Wie kann ich einfach das *User* Temp Verzeichnis unter linux herraus bekommen?

tempfile.gettempdir() liefert immer nur das Globale Verzeichnis: /tmp

Re: User temp verzeichniss...

Verfasst: Mittwoch 13. Juli 2011, 11:50
von frabron
Afaik gibt es das nicht. Zumindest unter Debian ist /tmp mit Sticky-Bit, so dass nur der User, der Daten in /tmp ablegt, die auch verarbeiten kann. Schwebte dir sowas wie /home/user/tmp vor, oder was hast du erwartet?

Re: User temp verzeichniss...

Verfasst: Mittwoch 13. Juli 2011, 12:20
von jens
frabron hat geschrieben:Schwebte dir sowas wie /home/user/tmp vor, oder was hast du erwartet?
Ja, genau.

Zum eigentlichen Problem: mit tempfile.gettempdir() lege ich einen Pfad für einen Cache einer Web-App fest.

Dumm ist, wenn mehrere User die gleiche App und somit den gleichen Cache nutzten...

Re: User temp verzeichniss...

Verfasst: Mittwoch 13. Juli 2011, 12:27
von sparrow
Hallo Jens,

was machst du wenn ein User mehrmals die Applikation startet? Vllt. auf verschiedenen Ports als verschiedene Instanzen?

Wie wärs mit einem Prefix für die Dateien oder ein Unterverzeichnis unter /tmp das den Benutzernamen enthält?
Entweder ein hash, eine Zufallszeichenkette oder die PID?

Gruß
Sebastian

Re: User temp verzeichniss...

Verfasst: Mittwoch 13. Juli 2011, 13:25
von frabron
Ich benutze oft tempfile.mkdtemp() für sowas und überlasse es Python, einen geeigneten Namen zu finden. Allerdings weiss ich nicht, ob das auch im Webumfeld funktioniert.
Temporäre Ordner, wie du sie dir vorstellst, gibt es so unter Linux nicht. Läuft der Server dann unter den Rechten eines Systemnutzers? Oder ist das immer www-data, wie beim Apache z.B.?

Re: User temp verzeichniss...

Verfasst: Mittwoch 13. Juli 2011, 13:43
von jens
In meinem Falle läuft apache mit dem user meines accounts. Also nicht mit nobody. Weiß jemand was tempfile.gettempdir() ausspuckt, wenn apache als nobody läuft?

Es ist auch nicht so, das man einen cache pro thread/prozess benötig: Schließlich soll der cache in einem multi-thread Umfeld (fastCGI) auch gleichzeitig genutzt werden.

tempfile.mkdtemp() würde IMHO pro thread/prozess ein eigenes Verzeichnis nutzten...

Am klügsten erscheint mit z.Z. den Usernamen mit aufzunehmen...

Gerade mache ich das so, ohne Usernamen:

Code: Alles auswählen

_PATH_CHMODE = 0700
def _get_and_create_tempdir_location(suffix):
    """Little helper for easy setup a cache filesystem path in temp"""
    import os, tempfile
    path = os.path.join(tempfile.gettempdir(), suffix)
    if not os.path.exists(path):
        os.makedirs(path, _PATH_CHMODE)
    else:
        os.chmod(path, _PATH_CHMODE)
    return path

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': _get_and_create_tempdir_location("PyLucid_default_cache_%s" % SITE_ID),
    },
    'dbtemplates': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': _get_and_create_tempdir_location("PyLucid_dbtemplates_cache_%s" % SITE_ID),
    },
    'local_sync_cache': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': _get_and_create_tempdir_location("PyLucid_local_sync_cache_%s" % SITE_ID),
    }
}

EDIT: Wobei Usernamen nutzten ist nicht so einfach, denn im os.environ steckt nur:
  • VIRTUALENV_FILE
    PATH
    TZ
    DJANGO_SETTINGS_MODULE

Re: User temp verzeichniss...

Verfasst: Mittwoch 13. Juli 2011, 14:06
von frabron
Also ich meine ja, mkdtemp macht auch nix anderes als deine Funktion. Der Rest übersteigt leider meine Erfahrung, sorry ...

Re: User temp verzeichniss...

Verfasst: Mittwoch 13. Juli 2011, 14:22
von cofi
jens hat geschrieben:In meinem Falle läuft apache mit dem user meines accounts. Also nicht mit nobody. Weiß jemand was tempfile.gettempdir() ausspuckt, wenn apache als nobody läuft?
Hach, zu schade, dass der Code nicht verfuegbar ist .. oh moment: http://hg.python.org/cpython/file/e0cd3 ... le.py#l127

Es werden nur die ueblichen Verdaechtigen ueberprueft, nicht Nutzerabhaengig.

Re: User temp verzeichniss...

Verfasst: Mittwoch 13. Juli 2011, 15:05
von Xynon1
Dann gib doch das/die Verzeichnise selbst an, was anderes macht die Funktion schließlich auch nicht. Du hast doch ein Verzeichnis für jeden Nutzer, dann musst du doch nur die Homeverzeichnise dieser ermitteln und dann mit dem Pfad zusammen setzen. Wenn nicht jeder von denen das gleiche Temporäre Verzeichnis hat kann man die doch gar nicht ermittelt, außer wenn eine entsprechen Konfigurations- oder Umgebungsvariable gesetzt wurde.
Oder sehe ich das falsch?

Re: User temp verzeichniss...

Verfasst: Mittwoch 13. Juli 2011, 15:28
von jens
Das ganze passiert eh in der "local_settings.py"... Da kann der admin natürlich auch feste Strings angeben...

Aber ich möchte halt nach Möglichkeit eine Lösung die direkt funktioniert...

Mit https://github.com/jedie/PyLucid/commit ... 3761cc2d48 hab ich das ganze ein wenig geändert. beim Aufruf von ./create_page_instance.sh wird automatisch der aktuelle Username in der erzeugen local_settings.py eingetragen... Anpassen kann der admin das dann immer noch...