web-dev-qa-db-fra.com

Comment le répertoire / tmp est-il nettoyé?

Comment le répertoire /tmp est-il nettoyé? Est-ce automatique? Si oui, à quelle fréquence est-il nettoyé?

294
Olivier Lalonde

Remarque! Cette réponse est obsolète depuis au moins Ubuntu 14.04. Voir les autres réponses pour la situation actuelle et si elles s'avèrent correctes alors les révulser furieusement Publiez également un commentaire afin que je puisse mettre un lien ici vers la réponse correcte actuelle.

Pour 14.04, voir https://askubuntu.com/a/759048/1366

Pour 16.10, voir https://askubuntu.com/a/857154/453746


Ancienne réponse de 2011:

Le nettoyage de /tmp est effectué par le script upstart /etc/init/mounted-tmp.conf. Le script est exécuté par upstart chaque fois que /tmp est monté. Pratiquement cela signifie à chaque démarrage.

Le script effectue grossièrement ce qui suit: si un fichier dans /tmp est plus ancien que $TMPTIME jours, il sera supprimé.

La valeur par défaut de $TMPTIME est 0, ce qui signifie que tous les fichiers et répertoires de /tmp sont supprimés. $TMPTIME est une variable d'environnement définie dans /etc/default/rcS.

186
lesmana

Le répertoire est effacé par défaut à chaque démarrage, car TMPTIME est 0 par défaut.

Ici vous pouvez changer l'heure dans le fichier suivant:

/etc/default/rcS

TMPTIME indique la fréquence à laquelle le répertoire tmp devrait être effacé en quelques jours.

139
Max Ruf

Bien que le dossier /tmp ne soit pas un emplacement pour stocker des fichiers à long terme, vous souhaitez parfois conserver les choses un peu plus longtemps que la prochaine fois que vous redémarrez, qui est la valeur par défaut sur les systèmes Ubuntu. Je connais une ou deux fois où j'ai téléchargé quelque chose sur /tmp lors des tests, redémarré après avoir apporté des modifications, puis perdu à nouveau les données d'origine. Cela peut être changé si vous souhaitez conserver vos fichiers /tmp un peu plus longtemps.

Modification de la fréquence de nettoyage /tmp

Le paramètre par défaut qui demande à votre système d'effacer /tmp au redémarrage est conservé dans le fichier /etc/default/rcS. La valeur que nous allons examiner est TMPTIME.

La valeur actuelle de TMPTIME=0 indique la suppression de fichiers au redémarrage, malgré l’âge du fichier. Changer cette valeur en un nombre différent (positif) changera le nombre de jours qu'un fichier peut survivre dans /tmp.

TMPTIME=7

Ce paramètre permettrait aux fichiers de rester dans /tmp jusqu'à ce qu'ils soient vieux d'une semaine, puis de les supprimer au prochain redémarrage. Un nombre négatif (TMPTIME=-1) indique au système de ne jamais rien supprimer dans /tmp. Ce n'est probablement pas quelque chose que vous voulez, mais qui est disponible.

63
hhlp

Je vérifie cela sur Ubuntu 16.10. Je peux certifier que la modification de/etc/default/rcS n’a plus aucun effet et que les fichiers de tmp sont effacés par le redémarrage, quoi que vous placiez dans ce fichier. Comme d'autres l'ont mentionné, tmpreaper n'est plus utilisé.

Je pense que la bonne réponse est que Ubuntu 16.10 a une nouvelle configuration. Il existe un dossier /etc/tmpfiles.d, documenté dans la page de manuel "tmpfiles.d". Dans ce dossier, vous devez placer un fichier de configuration pour contrôler si le fichier/tmp doit être effacé. C’est ce que je suis en train de faire pour empêcher les redémarrages d’effacer les fichiers de/tmp à moins qu’ils ne soient vieux de 20 jours:

#/etc/tmpfiles.d/tmp.conf

d /tmp 1777 root root 20d

Remplacez "20d" par "-" si vous ne voulez jamais que des fichiers soient supprimés. Ceci est mon meilleur effort, cette page de manuel est presque impénétrable avec les détails.

L'avantage de la nouvelle configuration réside dans le fait qu'un nettoyeur de fichiers peut toujours fonctionner même si le système n'est pas redémarré (comme dans le cas d'un serveur toujours actif). C'est un gros plus, je pense.

40
pauljohn32

Dans Ubuntu 14.04, cela est fait par tmpreaper , appelé quotidiennement par cron (depuis /etc/cron.daily). Le programme peut être configuré via /etc/default/rcS et /etc/tmpreaper.conf.

26
Martin Schröder

Avant 14.04:

Il est nettoyé chaque fois que vous redémarrez.

10
Utku Demir

Dans systemd Ubuntu (15.10 et plus récent), cette opération est effectuée par systemd, à l’aide du service systemd-tmpfiles-clean et du minuteur:

$ 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

Et

$ 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

Donc, systemd-tmpfiles-clean s’exécute à l’arrêt et une fois par jour sinon. Les fichiers qu'il nettoie peuvent être étendus à l'aide de /etc/tmpfiles.d mentionné dans autre réponse .

Vous pouvez modifier le comportement du minuteur lui-même en utilisant systemctl edit systemd-tmpfiles-clean.timer et en utilisant diverses options de configuration systemd Timer (voir man 5 systemd.timer ).

6
muru

Sur l'un de nos serveurs exécutant Ubuntu, nous avons un script pour supprimer des fichiers dans/tmp qui s'exécute tous les soirs.

Le script est:

#!/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 {} \;

Enregistrez simplement le contenu ci-dessus dans un fichier chmod 775 et créez une entrée cron pour l'exécuter. Comme il s’agit d’un serveur Web, nous ne souhaitons pas le redémarrer pour des raisons évidentes.

5
Paul