Come viene ripulita la directory / tmp?


301

Come viene /tmpripulita la directory? È automatico? In tal caso, con che frequenza viene pulita?


15
I miei file temporanei non vengono mai scritti sul disco. Vengono scritti su un disco RAM. Ho inserito tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0/ etc / fstab.
Anonimo il

Risposte:


192

Nota! Questa risposta è obsoleta da almeno Ubuntu 14.04. Vedi le altre risposte per la situazione attuale e se si rivelano corrette, votale furiosamente. Pubblica anche un commento così posso mettere il link qui alla risposta corretta corrente.

Per 14.04 consultare https://askubuntu.com/a/759048/1366

Per il 16.10 consultare https://askubuntu.com/a/857154/453746


Vecchia risposta dal 2011:

La pulizia di /tmpviene eseguita dallo script upstart /etc/init/mounted-tmp.conf. Lo script viene eseguito da upstart ogni volta che /tmpviene montato. Praticamente ciò significa ad ogni avvio.

Lo script esegue all'incirca quanto segue: se un file /tmpè più vecchio di $TMPTIMEgiorni verrà eliminato.

Il valore predefinito $TMPTIMEè 0, il che significa che tutti i file e tutte le directory /tmpvengono eliminati. $TMPTIMEè una variabile d'ambiente definita in /etc/default/rcS.


Questo non è più vero per 14.04 (lo script non esiste più).
Martin Schröder,

@Martin Schröder - lo script esiste sul mio sistema ed è un'installazione pulita di 14.04 e tmpreaper non esiste!
Lance Holland,

Sto usando Arch Linux ora, quindi non posso verificare. Scusate. Per favore qualcuno verifica questo e commenta o modifica la mia risposta.
lesmana,

4
in Ubuntu 16.04 tmpreaper viene abbandonato come non sicuro, vedere: fossies.org/linux/tmpreaper/debian/README.security
tamerlaha,

1
No. In Ubuntu 16.04 è semplicemente sostituito da un meccanismo systemd. Leggi quel documento e quello che troverai in realtà è una spiegazione del perché l'analisi di sicurezza che sostiene l'insicurezza è difettosa.
JdeBP,

141

La directory viene cancellata per impostazione predefinita ad ogni avvio, perché TMPTIMEè 0 per impostazione predefinita.

Qui è possibile modificare l'ora nel seguente file:

/etc/default/rcS

TMPTIME indica la frequenza con cui la directory tmp potrebbe essere cancellata in pochi giorni


9
La cancellazione a ogni avvio non è l'ideale per un computer che non viene mai riavviato, come un server. Ho oltre 500.000 file che occupano 5 GB di spazio nel mio / tmp perché il mio server ha 378 giorni di tempo di attività. Sono riluttante a riavviarlo, semplicemente perché cancellare quei file al riavvio richiede ore.
rjmunro,

10
Nel tuo caso dovresti dare tmpreaperuna possibilità.
qbi,

1
Un lavoro CRON potrebbe risolverlo facilmente.
Ken Sharp,

Inoltre tmpwatchdovrebbe essere uno strumento appropriato.
ArekBulski,

1
Sembra che Ubuntu / systemd fornisca già una soluzione. Direi di più ma .... systemd.
Ken Sharp,

65

Mentre la /tmpcartella non è un posto dove archiviare i file a lungo termine, a volte vuoi mantenere le cose un po 'più a lungo rispetto al prossimo riavvio , che è l'impostazione predefinita sui sistemi Ubuntu. Conosco una o due volte in cui ho scaricato qualcosa /tmpdurante il test, riavviato dopo aver apportato modifiche e quindi perso di nuovo i dati originali. Questo può essere modificato se desideri mantenere i tuoi /tmpfile un po 'più a lungo.

Modifica della /tmpfrequenza di pulizia

L'impostazione predefinita che dice al sistema di cancellare /tmpal riavvio è contenuta nel /etc/default/rcSfile. Il valore che vedremo è TMPTIME.

Il valore corrente di TMPTIME=0dice eliminare i file al riavvio nonostante l'età del file. La modifica di questo valore in un numero diverso (positivo) cambierà il numero di giorni in cui un file può sopravvivere /tmp.

TMPTIME=7

Questa impostazione consentirebbe ai file di rimanere /tmpfino a quando non sono trascorsi una settimana, quindi eliminarli al successivo riavvio. Un numero negativo ( TMPTIME=-1) indica al sistema di non eliminare mai nulla in /tmp. Questo probabilmente non è qualcosa che vuoi, ma è disponibile.


1
buona spiegazione. Ma in quale script è il comando cleanup? Ho visto /etc/init/mounted-temp.conf, ma ha la linea start on mounted MOUNTPOINT=/tmpche mi fa pensare che non sia applicabile.
enzotib,

7
Se non desideri che un file venga rimosso automaticamente, inseriscilo /var/tmpinvece di /tmp.
Gilles,

1
È anche utile conservare i file che non si desidera perdere (fotogrammi video renderizzati) quando il computer si arresta in modo anomalo, probabilmente a causa di OOM. Una soluzione migliore sarebbe quella di risolvere il problema, ovviamente. :-)
Ken Sharp

Questo può essere fatto all'interno di Cygwin?
CMCDragonkai

46

Sto verificando questo su Ubuntu 16.10. Posso certificare che la modifica di / etc / default / rcS non ha più alcun effetto e che i file in tmp vengono cancellati dal riavvio, indipendentemente da ciò che si inserisce in quel file. Come altri menzionano, tmpreaper non viene più utilizzato.

Penso che la risposta giusta sia che Ubuntu 16.10 ha una nuova configurazione. C'è una cartella /etc/tmpfiles.d, documentata nella pagina man "tmpfiles.d". In quella cartella, si dovrebbe posizionare un file di configurazione per controllare se / tmp deve essere cancellato. Questo è quello che sto facendo per impedire ai riavvii di cancellare i file in / tmp a meno che non abbiano 20 giorni:

#/etc/tmpfiles.d/tmp.conf

d /tmp 1777 root root 20d

Sostituisci "20d" con "-" se non vuoi mai cancellare i file. Questo è il mio miglior sforzo, quella pagina man è quasi impenetrabile con i dettagli.

Il vantaggio della nuova configurazione è che un pulitore di file può ancora essere eseguito anche se il sistema non viene riavviato (come nel caso di un server sempre attivo). Questo è un grande vantaggio, penso.


5
man tmpfiles.d
Martin Schröder,

Ho scoperto che puoi conservare le autorizzazioni e il proprietario del file originale usando i trattini:d /tmp/ - - - 20d
Dave Yarwood,

2
Vale anche la pena notare: è possibile verificare la configurazione eseguendo manualmente il lavoro di pulizia:systemctl start systemd-tmpfiles-clean
Dave Yarwood

@ pauljohn32 è vero anche per le versioni dopo il 16.10?
Kapad

3
@kapad: ho appena verificato che funziona anche su Ubuntu 18.04.
Gene Vincent,

26

In Ubuntu 14.04 questo viene fatto da tmpreaper, che viene chiamato quotidianamente da cron (da /etc/cron.daily). Il programma può essere configurato tramite /etc/default/rcSe /etc/tmpreaper.conf.


sul mio sistema, tmpreaper non era in /etc/cron.daily - ma sono stato in grado di installarlo con apt-get
Joe Germuska,

10

Prima del 14.04:

Viene ripulito ogni volta che si riavvia.


Appare con 14.04+ utilizza solo tmpreaper, non lo script "per boot" FWIW
rogerdpack

I miei sistemi 14.04 vengono ripuliti al riavvio. Non ne ho mai sentito parlare tmpreaper.
Ken Sharp,

cosa succede se non si riavvia mai il sistema?
phuclv,

8

In un systemdUbuntu (15.10 e successivi), questo viene fatto da systemd, usando il systemd-tmpfiles-cleanservizio e il 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

E

$ 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

Quindi systemd-tmpfiles-cleanviene eseguito allo spegnimento e, una volta al giorno, altrimenti. I file che pulisce possono essere estesi usando /etc/tmpfiles.dmenzionato in un'altra risposta .

È possibile modificare il comportamento del timer stesso utilizzando systemctl edit systemd-tmpfiles-clean.timere utilizzando varie Timeropzioni di configurazione del sistema (vedere man 5 systemd.timer).


Ho cambiato il timer in 20min e vedo che il comando status mostra che sta effettivamente usando la configurazione 20min. ma il mio problema è che /tmpnon è stato ancora pulito. e ho bisogno che venga ripulito. anche l'avvio manuale sudo systemctl start systemd-tmpfiles-cleannon fa il trucco. Qualche idea sul perché?
user2932688

4

Su uno dei nostri server che eseguono Ubuntu, abbiamo uno script per rimuovere i file in / tmp e funziona di notte.

Lo script è:

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

Basta salvare il contenuto sopra in un file chmod 775 e creare una voce cron per eseguirlo. Dato che si tratta di un server Web, non vogliamo riavviarlo per ovvi motivi.


6
Potresti stare meglio usando tmpwatch .
Poolie,

9
L'ultima riga è estremamente pericolosa. Normalmente, tutti sono in grado di correre ln -s /usr /tmp/kaboomo addirittura ln -s /* /tmp/...
Daniel Alder,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.