366 votes

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é?

18 votes

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.

0 votes

16voto

muru Points 180007

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

$ systemctl cat systemd-tmpfiles-clean.service 
# /lib/systemd/system/systemd-tmpfiles-clean.service
#  Ce fichier fait partie de systemd.
#
#  systemd est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier
#  selon les termes de la Licence publique générale limitée GNU telle que publiée par
#  la Free Software Foundation ; soit la version 2.1 de la Licence, ou
#  (à votre choix) toute version ultérieure.

[Unit]
Description=Nettoyage des répertoires temporaires
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
#  Ce fichier fait partie de systemd.
#
#  systemd est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier
#  selon les termes de la Licence publique générale limitée GNU telle que publiée par
#  la Free Software Foundation ; soit la version 2.1 de la Licence, ou
#  (à votre choix) toute version ultérieure.

[Unit]
Description=Nettoyage quotidien des répertoires temporaires
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)

[Timer]
OnBootSec=15min
OnUnitActiveSec=1d

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

Ainsi, systemd-tmpfiles-clean s'exécute à l'arrêt du système, 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).

Il est intéressant de noter qu'en tant que paramètre par défaut, /etc/tmpfiles.d est vide. Le fichier où la politique de /tmp est définie est ici :

/usr/lib/tmpfiles.d/tmp.conf

Contenu réel :

#  Ce fichier fait partie de systemd.
#
#  systemd est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier
#  selon les termes de la Licence publique générale limitée GNU telle que publiée par
#  la Free Software Foundation ; soit la version 2.1 de la Licence, ou
#  (à votre choix) toute version ultérieure.

# Voir tmpfiles.d(5) pour plus de détails

# Effacer les répertoires tmp séparément, pour les rendre plus faciles à remplacer
D /tmp 1777 root root -
#q /var/tmp 1777 root root 30d

Ainsi, comme déjà mentionné, pour le remplacer, vous pouvez consulter une autre réponse sur tmpfiles.d.

0 votes

J'ai changé le minuteur à 20 minutes et je vois que la commande de statut montre qu'il utilise effectivement la configuration de 20 minutes. Mais mon problème est que /tmp n'est toujours pas nettoyé et j'ai besoin qu'il le soit. Même en démarrant manuellement sudo systemctl start systemd-tmpfiles-clean, cela ne fonctionne pas. Des idées pourquoi?

0 votes

@ValerioBozz voir la réponse que j'ai liée: askubuntu.com/a/857154/158442

0 votes

Je supprime mes commentaires maintenant qu'ils sont intégrés

11voto

Utku Demir Points 271

Avant le 14.04:

C'est nettoyé à chaque redémarrage.

0 votes

Apparaît avec 14.04+, il utilise uniquement tmpreaper, pas le script "à chaque démarrage" FWIW

0 votes

Mes systèmes 14.04 se nettoient tous à chaque redémarrage. Je n'ai même jamais entendu parler de tmpreaper.

0 votes

What if you never reboot the system?

6voto

ADNow Points 152

Sur l'un de nos serveurs Ubuntu, nous avons un script pour supprimer les fichiers dans /tmp et il s'exécute chaque nuit.

Le script est :

#!/bin/sh
# Nettoyer les fichiers et répertoires de plus de 3 jours dans /tmp chaque nuit

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

Il suffit de sauvegarder le contenu ci-dessus dans un fichier, de donner les permissions chmod 775 au fichier et de créer 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.

7 votes

Vous feriez peut-être mieux d'utiliser tmpwatch.

12 votes

La dernière ligne est extrêmement dangereuse. Normalement, tout le monde est en mesure d'exécuter ln -s /usr /tmp/kaboom ou même ln -s /* /tmp/ ...

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X