Wie wird das Verzeichnis / tmp bereinigt?

262

Wie ist das Verzeichnis /tmp aufgeräumt? Ist es automatisch? Wenn ja, wie oft wird es aufgeräumt?

    
Olivier Lalonde 09.01.2011, 20:26
quelle

8 Antworten

177

Hinweis! Diese Antwort ist seit mindestens Ubuntu 14.04 veraltet. Sehen Sie andere Antworten für die aktuelle Situation und wenn sie sich als richtig erweisen, dann heben Sie sie wütend auf. Auch Beitrag kommentieren, also kann ich Verbindung hier zur gegenwärtigen korrekten Antwort setzen.

Für 14.04 siehe Pfandrecht

Für 16.10 siehe Pfandrecht

Alte Antwort von 2011:

Die Reinigung von /tmp erfolgt durch das Upstart-Skript /etc/init/mounted-tmp.conf . Das Skript wird jedes Mal vom Emporkömmling ausgeführt, wenn /tmp angehängt ist. Praktisch bedeutet das bei jedem Booten.

Das Skript führt ungefähr folgendes aus: Wenn eine Datei in /tmp älter als $TMPTIME Tage ist, wird sie gelöscht.

Der Standardwert von $TMPTIME ist 0, was bedeutet, dass jede Datei und jedes Verzeichnis in /tmp gelöscht wird. $TMPTIME ist eine Umgebungsvariable, die in /etc/default/rcS definiert ist.

    
lesmana 10.01.2011, 01:17
quelle
134

Das Verzeichnis wird standardmäßig bei jedem Start gelöscht, weil TMPTIME standardmäßig 0 ist.

Hier können Sie die Zeit in der folgenden Datei ändern:

/etc/default/rcS

TMPTIME sagt, wie häufig die tmp-Anweisung in Tagen gelöscht werden sollte

    
Max Ruf 09.01.2011 20:35
quelle
58

Während der Ordner /tmp kein Speicherort für Dateien ist, möchten Sie gelegentlich etwas länger als beim nächsten Neustart halten , was auf Ubuntu-Systemen standardmäßig der Fall ist . Ich weiß, ein oder zwei Mal habe ich während des Tests etwas nach /tmp heruntergeladen, nach Änderungen neu gestartet und dann die Originaldaten wieder verloren. Dies kann geändert werden, wenn Sie Ihre /tmp -Dateien ein wenig länger behalten möchten.

Ändern der /tmp Cleanup-Häufigkeit

Die Standardeinstellung, die Ihr System anweist, /tmp beim Neustart zu löschen, wird in der Datei /etc/default/rcS gespeichert. Der Wert, den wir betrachten, ist TMPTIME .

Der aktuelle Wert von TMPTIME=0 besagt, dass Dateien trotz des Alters der Datei beim Neustart gelöscht werden. Wenn Sie diesen Wert in eine andere (positive) Zahl ändern, wird die Anzahl der Tage geändert, die eine Datei in /tmp überleben kann.

TMPTIME=7

Mit dieser Einstellung können Dateien in /tmp verbleiben, bis sie eine Woche alt sind, und dann beim nächsten Neustart gelöscht werden. Eine negative Zahl ( TMPTIME=-1 ) weist das System an, nie etwas in /tmp zu löschen. Dies ist wahrscheinlich nicht etwas, das Sie wollen, aber verfügbar ist.

    
hhlp 09.01.2011 20:35
quelle
26

In Ubuntu 14.04 geschieht dies durch tmpreaper , das täglich aufgerufen wird von cron (aus /etc/cron.daily ). Das Programm kann über /etc/default/rcS und /etc/tmpreaper.conf konfiguriert werden.

    
Martin Schröder 19.04.2016 14:00
quelle
26

Ich überprüfe das auf Ubuntu 16.10. Ich kann bestätigen, dass die Bearbeitung von / etc / default / rcS überhaupt nicht mehr funktioniert und die Dateien in tmp durch einen Neustart gelöscht werden, egal was Sie in diese Datei schreiben. Wie andere erwähnen, wird Tmpreaper nicht mehr verwendet.

Ich denke, die richtige Antwort ist, dass Ubuntu 16.10 ein neues Setup hat. Es gibt einen Ordner /etc/tmpfiles.d, der in der Manpage "tmpfiles.d" dokumentiert ist. In diesem Ordner sollte man eine Konfigurationsdatei ablegen, um zu kontrollieren, ob / tmp gelöscht werden soll. Dies ist, was ich mache, um zu verhindern, dass Neustarts Dateien in / tmp löscht, wenn sie nicht 20 Tage alt sind:

#/etc/tmpfiles.d/tmp.conf

d /tmp 1777 root root 20d

Ersetzen Sie "20d" durch "-", wenn Sie nie möchten, dass Dateien gelöscht werden. Das ist meine beste Bemühung, diese Manpage ist mit Details fast undurchdringlich.

Der Vorteil des neuen Setups besteht darin, dass ein Datei-Cleaner auch dann noch ausgeführt werden kann, wenn das System nicht neu gestartet wird (wie im Fall eines Always-On-Servers). Das ist ein großes Plus, denke ich.

    
pauljohn32 05.12.2016 05:10
quelle
10

Vor 14.04:

Es wird bei jedem Neustart bereinigt.

    
Utku Demir 09.01.2011 20:34
quelle
5

Auf einem unserer Server, auf dem Ubuntu läuft, haben wir ein Skript, um Dateien in / tmp zu entfernen, und es wird jeden Abend ausgeführt.

Das Skript lautet:

#!/bin/sh
# Clean file and dirs more than 3 days old in /tmp nightly

/usr/bin/find /tmp -type f -atime +2 -mtime +2  |xargs  /bin/rm -f &&

/usr/bin/find /tmp -type d -mtime +2 -exec /bin/rm -rf '{}' \; &&

/usr/bin/find /tmp -type l -ctime +2 |xargs /bin/rm -f &&

/usr/bin/find -L /tmp -mtime +2 -print -exec rm -f {} \;

Speichern Sie einfach den Inhalt oben in einer Datei chmod 775 die Datei und erstellen Sie einen Cron-Eintrag, um es auszuführen. Da dies ein Webserver ist, wollen wir ihn aus offensichtlichen Gründen nicht neu starten.

    
Paul 28.09.2011 06:54
quelle
3

In einem systemd Ubuntu (15.10 und neuer) wird dies von systemd mit dem systemd-tmpfiles-clean Service und Timer gemacht:

$ systemctl cat systemd-tmpfiles-clean.service 
# /lib/systemd/system/systemd-tmpfiles-clean.service
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
DefaultDependencies=no
Conflicts=shutdown.target
After=local-fs.target time-sync.target
Before=shutdown.target

[Service]
Type=oneshot
ExecStart=/bin/systemd-tmpfiles --clean
IOSchedulingClass=idle

Und

$ systemctl cat systemd-tmpfiles-clean.timer  
# /lib/systemd/system/systemd-tmpfiles-clean.timer
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

So systemd-tmpfiles-clean läuft beim Herunterfahren, und einmal am Tag sonst. Die bereinigten Dateien können mit /etc/tmpfiles.d erweitert werden, das in einer anderen Antwort erwähnt wird.

Sie können das Verhalten des Timers selbst ändern, indem Sie systemctl edit systemd-tmpfiles-clean.timer verwenden und verschiedene Konfigurationsoptionen für systemd Timer verwenden (siehe man 5 systemd.timer ).

    
muru 06.12.2017 18:11
quelle

Tags und Links