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


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


262
2018-01-09 19:26


origine


Mes fichiers temporaires ne sont jamais écrits sur le disque. Ils sont écrits sur un disque RAM. J'ai mis tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0 dans / etc / fstab. - Anonymous


Réponses:


Remarque! 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 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 se fait par le script upstart /etc/init/mounted-tmp.conf. Le script est exécuté par upstart à chaque fois /tmp est monté. Cela signifie pratiquement à chaque démarrage.

Le script fait en gros 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 chaque fichier et répertoire de /tmp est supprimé $TMPTIME est une variable d'environnement définie dans /etc/default/rcS.


178
2018-01-10 00:17



Ce n'est plus le cas pour 14.04 (le script n'existe plus). - Martin Schröder
@Martin Schröder - le script existe sur mon système et c'est une installation propre de 14.04 et tmpreaper n'existe pas! - Lance Holland
J'utilise arch linux maintenant et je ne peux pas vérifier. Pardon. S'il vous plaît quelqu'un vérifier ceci et commenter ou éditer ma réponse. - lesmana
dans Ubuntu 16.04 tmpreaper est abandonné comme non sécurisé s'il vous plaît voir: fossies.org/linux/tmpreaper/debian/README.security - Tamerlaha


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 dit la fréquence à laquelle le dir de tmp devrait être effacé en quelques jours


135
2018-01-09 19:35



Effacer à chaque démarrage n'est pas idéal pour une machine qui ne redémarre jamais, comme un serveur. J'ai plus de 500 000 fichiers contenant 5 Go d'espace sur mon / tmp, car mon serveur a 378 jours de disponibilité. Je suis réticent à le redémarrer, simplement parce que l’effacement de ces fichiers au redémarrage prend des heures. - rjmunro
Dans votre cas, vous devriez donner tmpreaper une chance. - qbi
Un travail CRON pourrait facilement résoudre ce problème. - Ken Sharp
Aussi tmpwatch devrait être un outil approprié. - ArekBulski
Il semble que Ubuntu / systemd apporte déjà une solution. Je dirais plus mais .... systemd. - Ken Sharp


Tandis que le /tmp dossier n'est pas un endroit pour stocker des fichiers à long terme, parfois vous voulez garder les choses un peu plus longtemps que le 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, j'ai téléchargé quelque chose à /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 votre /tmp fichiers un peu plus longtemps.

Changer le /tmp Fréquence de nettoyage

Le paramètre par défaut qui indique à votre système d'effacer /tmp au redémarrage est tenu dans le /etc/default/rcS fichier. La valeur que nous allons examiner 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 /tmp.

TMPTIME=7

Ce paramètre permettrait aux fichiers de rester dans /tmp jusqu'à ce qu'ils aient une semaine, puis supprimez-les 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.


58
2018-01-09 19:35



bonne explication. Mais dans quel script est la commande de nettoyage? J'ai vu /etc/init/mounted-temp.conf, mais il a la ligne start on mounted MOUNTPOINT=/tmp ça me fait penser que c'est non applicable. - enzotib
Si vous ne voulez pas qu'un fichier soit supprimé automatiquement, mettez-le dans /var/tmp au lieu de /tmp. - Gilles
Il est également pratique de conserver les fichiers que vous ne voulez pas perdre (images vidéo rendues) lorsque votre machine tombe en panne, probablement en raison du MOO. Une meilleure solution serait de résoudre le problème, bien sûr. :-) - Ken Sharp
Cela peut-il être fait à l'intérieur de Cygwin? - CMCDragonkai


Je vérifie ceci sur Ubuntu 16.10. Je peux certifier que le montage / etc / default / rcS n'a pas d'effet plus du tout et les fichiers tmp sont essuyées par le redémarrage, peu importe ce que vous mettez 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 de 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 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.


29
2017-12-05 04:10



man tmpfiles.d - Martin Schröder
J'ai constaté que vous pouvez conserver les autorisations et le propriétaire du fichier d'origine en utilisant des tirets: d /tmp/ - - - 20d - Dave Yarwood
À noter également: vous pouvez tester votre configuration en exécutant le travail de nettoyage manuellement: systemctl start systemd-tmpfiles-clean - Dave Yarwood


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


26
2018-04-19 12:00



sur mon système, tmpreaper n'était pas dans /etc/cron.daily - mais j'ai pu l'installer avec apt-get - Joe Germuska


Avant 14.04:

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


10
2018-01-09 19:34



Apparaît avec 14.04+, il utilise uniquement tmpreaper, pas le script "par démarrage" FWIW - rogerdpack
Mes systèmes 14.04 sont tous nettoyés au redémarrage. Jamais entendu parler de tmpreaper. - Ken Sharp
Et si vous ne redémarrez jamais le système? - phuclv


Sur l'un de nos serveurs exécutant Ubuntu, nous avons un script pour supprimer les 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.


5
2017-09-28 04:54



Vous pourriez être mieux en utilisant tmpwatch. - poolie
La dernière ligne est extrêmement dangereuse. Normalement, tout le monde peut courir ln -s /usr /tmp/kaboom ou même ln -s /* /tmp/ ... - Daniel Alder


Dans un systemd Ubuntu (15.10 et plus récent), ceci est fait par systemd, en utilisant le systemd-tmpfiles-clean service et minuterie:

$ 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

Alors systemd-tmpfiles-clean fonctionne à 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 changer le comportement de la minuterie en utilisant systemctl edit systemd-tmpfiles-clean.timer, et en utilisant divers systemd Timer options de configuration (voir man 5 systemd.timer).


3
2017-12-06 17:11