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

262

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

    
posée Olivier Lalonde 09.01.2011 - 20:26
la source

8 réponses

177

Note! Cette réponse est obsolète depuis au moins Ubuntu 14.04. Voir d'autres réponses pour la situation actuelle et si elles se révèlent correctes, alors votez avec fureur. Aussi poster un commentaire afin que je puisse mettre un lien ici pour la réponse correcte actuelle.

Pour 14.04, voir lien

Pour 16.10, voir lien

Ancienne réponse de 2011:

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

Le script fait à peu près ce qui suit: si un fichier dans /tmp est plus vieux 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 dans /tmp sont supprimés. $TMPTIME est une variable d'environnement définie dans /etc/default/rcS .

    
réponse donnée lesmana 10.01.2011 - 01:17
la source
134

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

Ici, vous pouvez modifier l’heure dans le fichier suivant:

/etc/default/rcS

TMPTIME dit à quelle fréquence le répertoire tmp doit être effacé en quelques jours

    
réponse donnée Max Ruf 09.01.2011 - 20:35
la source
58

Bien que le dossier /tmp ne soit pas un endroit pour stocker des fichiers à long terme, vous souhaitez parfois conserver un peu plus de temps que le redémarrage , qui est la configuration par défaut des systèmes Ubuntu. . Je sais qu'une ou deux fois j'ai téléchargé quelque chose à /tmp pendant le test, redémarré après avoir apporté des modifications et ensuite 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 indique à votre système d'effacer /tmp au redémarrage est conservé dans le fichier /etc/default/rcS . La valeur que nous examinerons est TMPTIME .

La valeur actuelle de TMPTIME=0 dit supprimer les fichiers au redémarrage malgré l’âge du fichier. Changer cette valeur en un nombre différent (positif) changera le nombre de jours pendant lesquels un fichier peut survivre dans /tmp .

TMPTIME=7

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

    
réponse donnée hhlp 09.01.2011 - 20:35
la source
26

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

    
réponse donnée Martin Schröder 19.04.2016 - 14:00
la source
26

Je vérifie ceci sur Ubuntu 16.10. Je peux certifier que l'édition de / etc / default / rcS n'a plus d'effet et que les fichiers de tmp sont effacés par le redémarrage, peu importe ce que vous avez mis dans ce fichier. Comme d'autres le mentionnent, tmpreaper n'est plus utilisé.

Je pense que la bonne réponse est que Ubuntu 16.10 a une nouvelle configuration. Il y a un dossier /etc/tmpfiles.d, documenté dans la page de manuel "tmpfiles.d". Dans ce dossier, il faut placer un fichier de configuration pour contrôler si / tmp doit être effacé. C'est ce que je fais pour arrêter les redémarrages à partir de l'effacement des fichiers dans / tmp sauf s'ils ont 20 jours:

#/etc/tmpfiles.d/tmp.conf

d /tmp 1777 root root 20d

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

L'avantage de la nouvelle configuration est qu'un nettoyeur de fichiers peut toujours être exécuté 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.

    
réponse donnée pauljohn32 05.12.2016 - 05:10
la source
10

Avant 14.04:

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

    
réponse donnée Utku Demir 09.01.2011 - 20:34
la source
5

Sur l’un de nos serveurs exécutant Ubuntu, nous avons un script pour supprimer des fichiers dans / tmp et il fonctionne 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 du fichier et créez une entrée cron pour l'exécuter. Comme il s’agit d’un serveur Web, nous ne voulons pas le redémarrer pour des raisons évidentes.

    
réponse donnée Paul 28.09.2011 - 06:54
la source
3

Dans un systemd Ubuntu (15.10 et plus récent), cela est fait par systemd, en utilisant le service systemd-tmpfiles-clean et le 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 en utilisant /etc/tmpfiles.d mentionné dans une 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 ).

    
réponse donnée muru 06.12.2017 - 18:11
la source

Lire d'autres questions sur les étiquettes