Frage Wie wird das Verzeichnis / tmp bereinigt?


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


262
2018-01-09 19:26


Ursprung


Meine temporären Dateien werden niemals auf die Festplatte geschrieben. Sie werden auf eine RAM-Disk geschrieben. Ich habe es gesagt tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0 in / etc / fstab. - Anonymous


Antworten:


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 Link hier zur gegenwärtigen korrekten Antwort setzen.

Für 14.04 sehen https://askubuntu.com/a/759048/1366

Für 16.10 sehen https://askubuntu.com/a/857154/453746


Alte Antwort von 2011:

Die Reinigung von /tmp wird durch das Upstart-Skript gemacht /etc/init/mounted-tmp.conf. Das Skript wird jedes Mal neu gestartet /tmp montiert. Praktisch bedeutet das bei jedem Start.

Das Skript macht ungefähr folgendes: Wenn eine Datei in /tmp ist älter als $TMPTIME Tage wird es gelöscht.

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


178
2018-01-10 00:17



Das stimmt nicht mehr für 14.04 (das Skript existiert nicht mehr). - Martin Schröder
@Martin Schröder - das Skript existiert auf meinem System & es ist eine saubere Installation von 14.04 und tmpreaper existiert nicht! - Lance Holland
Ich benutze Arch Linux jetzt, so kann ich nicht überprüfen. Es tut uns leid. Bitte überprüfen Sie dies und kommentieren oder bearbeiten Sie meine Antwort. - lesmana
in ubuntu 16.04 tmpreaper ist als unsicher verlassen Sie bitte sehen: fossies.org/linux/tmpreaper/debian/README.security - Tamerlaha


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

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

/etc/default/rcS

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


135
2018-01-09 19:35



Das Löschen bei jedem Start ist nicht ideal für einen Computer, der nie neu gestartet wird, wie ein Server. Ich habe über 500.000 Dateien mit 5 GB Speicherplatz in meinem / tmp, da mein Server 378 Tage Betriebszeit hat. Ich zögere, es neu zu starten, weil das Löschen dieser Dateien beim Neustart Stunden dauert. - rjmunro
In deinem Fall solltest du geben tmpreaper eine Chance. - qbi
Ein CRON-Job könnte das leicht lösen. - Ken Sharp
Ebenfalls tmpwatch sollte ein geeignetes Werkzeug sein. - ArekBulski
Es sieht so aus, als ob Ubuntu / systemd bereits eine Lösung bietet. Ich würde mehr sagen aber ... systemd. - Ken Sharp


Während /tmp Ordner ist nicht ein Ort, um Dateien langfristig zu speichern, gelegentlich möchten Sie die Dinge ein wenig länger als die halten das nächste Mal, wenn Sie neu startenDies ist die Standardeinstellung für Ubuntu-Systeme. Ich weiß, dass ich ein oder zwei Mal etwas heruntergeladen habe /tmp während des Tests nach Änderungen neu gestartet und dann die ursprünglichen Daten wieder verloren. Dies kann geändert werden, wenn Sie Ihre behalten möchten /tmp Dateien ein wenig länger.

Wechseln /tmp Aufräumfrequenz

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

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

TMPTIME=7

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


58
2018-01-09 19:35



gute Erklärung. Aber in welchem ​​Skript ist der Cleanup-Befehl? ich habe gesehen /etc/init/mounted-temp.conf, aber es hat die Linie start on mounted MOUNTPOINT=/tmp das lässt mich denken, dass es nicht anwendbar ist. - enzotib
Wenn Sie nicht möchten, dass eine Datei automatisch entfernt wird, fügen Sie sie ein /var/tmp Anstatt von /tmp. - Gilles
Es ist auch praktisch, Dateien zu behalten, die Sie nicht verlieren möchten (gerenderte Videobilder), wenn Ihr Computer abstürzt, möglicherweise aufgrund von OOM. Eine bessere Lösung wäre natürlich, das Problem zu beheben. :-) - Ken Sharp
Kann das in Cygwin gemacht werden? - CMCDragonkai


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öschen, 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 Falle eines Always-On-Servers). Das ist ein großes Plus, denke ich.


29
2017-12-05 04:10



man tmpfiles.d - Martin Schröder
Ich habe festgestellt, dass Sie die ursprünglichen Dateiberechtigungen und den Besitzer mithilfe von Bindestrichen beibehalten können: d /tmp/ - - - 20d - Dave Yarwood
Beachten Sie auch Folgendes: Sie können Ihre Konfiguration testen, indem Sie den Reinigungsauftrag manuell ausführen: systemctl start systemd-tmpfiles-clean - Dave Yarwood


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


26
2018-04-19 12:00



auf meinem System war tmpreaper nicht in /etc/cron.daily - aber ich konnte es mit apt-get installieren - Joe Germuska


Vor dem 14.04:

Es wird bei jedem Neustart aufgeräumt.


10
2018-01-09 19:34



Erscheint mit 14.04 + es verwendet nur tmpreaper, nicht das "per boot" Skript FWIW - rogerdpack
Meine 14.04-Systeme bereinigen alle beim Neustart. Hab noch nie davon gehört tmpreaper. - Ken Sharp
Was ist, wenn Sie das System nie neu starten? - phuclv


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 ist:

#!/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.


5
2017-09-28 04:54



Sie könnten besser damit umgehen tmpwatch. - poolie
Die letzte Zeile ist extrem gefährlich. Normalerweise kann jeder rennen ln -s /usr /tmp/kaboom oder auch ln -s /* /tmp/ ... - Daniel Alder


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

$ 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

Damit systemd-tmpfiles-clean läuft beim Herunterfahren und sonst einmal am Tag. Die bereinigten Dateien können mit erweitert werden /etc/tmpfiles.d erwähnt in eine andere Antwort.

Sie können das Timer-Verhalten selbst mit ändern systemctl edit systemd-tmpfiles-clean.timerund verschiedene systemd verwenden Timer Konfigurationsoptionen (siehe man 5 systemd.timer).


3
2017-12-06 17:11