Domanda Come viene ripulita la directory / tmp?


Come è il /tmp directory pulita? È automatico? In tal caso, con quale frequenza viene ripulito?


262
2018-01-09 19:26


origine


I miei file temporanei non vengono mai scritti sul disco. Vengono scritti su un disco RAM. L'ho fatto tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0 in / etc / fstab. - Anonymous


risposte:


Nota! Questa risposta è obsoleta dal momento che almeno ubuntu 14.04. Vedi altre risposte per la situazione attuale e se si rivelano corrette, quindi alzarle furiosamente. Invia anche un commento in modo da poter inserire il link qui alla risposta corretta corrente.

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

Per 16.10 vedi https://askubuntu.com/a/857154/453746


Vecchia risposta dal 2011:

La pulizia di /tmp è fatto dallo script upstart /etc/init/mounted-tmp.conf. Lo script è eseguito da upstart ogni volta /tmp è montato. Praticamente questo significa ad ogni avvio.

Lo script fa approssimativamente il seguente: se un file in /tmp è più vecchio di $TMPTIME giorni sarà cancellato.

Il valore predefinito di $TMPTIME è 0, il che significa che ogni file e directory in /tmp viene cancellato. $TMPTIME è una variabile di ambiente definita in /etc/default/rcS.


178
2018-01-10 00:17



Questo non è più vero per la 14.04 (lo script non esiste più). - Martin Schröder
@ Martin Schröder - lo script esiste sul mio sistema e si tratta di un'installazione pulita di 14.04 e tmpreaper non esiste! - Lance Holland
Sto usando arch linux ora, quindi non posso verificarlo. Scusate. Per favore qualcuno verifichi questo e commenta o modifica la mia risposta. - lesmana
in ubuntu 16.04 tmpreaper viene abbandonato come non protetto si prega di vedere: fossies.org/linux/tmpreaper/debian/README.security - Tamerlaha


La directory viene cancellata di default ad ogni avvio, perché TMPTIME è 0 di default.

Qui puoi cambiare il tempo nel seguente file:

/etc/default/rcS

TMPTIME dice quanto frequentemente la dir tmp dovrebbe essere cancellata in giorni


135
2018-01-09 19:35



L'azzeramento ad ogni avvio non è l'ideale per una macchina che non viene mai riavviata, 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 operatività. Sono riluttante a riavviarlo, semplicemente perché cancellare quei file al riavvio richiede ore. - rjmunro
Nel tuo caso dovresti dare tmpreaper una possibilità. - qbi
Un lavoro CRON potrebbe facilmente risolverlo. - Ken Sharp
Anche tmpwatch dovrebbe essere uno strumento appropriato - ArekBulski
Sembra che Ubuntu / systemd fornisca già una soluzione. Direi di più ma .... systemd. - Ken Sharp


Mentre il /tmp la cartella non è un posto dove archiviare i file a lungo termine, occasionalmente vuoi mantenere le cose un po 'più lunghe di la prossima volta riavvii, che è l'impostazione predefinita su sistemi Ubuntu. So che una volta o due ho scaricato qualcosa su /tmp durante il test, riavviato dopo aver apportato le modifiche e quindi perso di nuovo i dati originali. Questo può essere cambiato se vuoi mantenere il tuo /tmp file un po 'più a lungo.

Cambiare il /tmp Frequenza di pulizia

L'impostazione predefinita che dice al tuo sistema di cancellare /tmp al riavvio si svolge nel /etc/default/rcS file. Il valore che vedremo è TMPTIME.

Il valore corrente di TMPTIME=0 dice elimina i file al riavvio, nonostante l'età del file. La modifica di questo valore su 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 dentro /tmp fino a quando non hanno una settimana, e poi cancellarli al prossimo riavvio. Un numero negativo (TMPTIME=-1) dice al sistema di non cancellare mai nulla in /tmp. Questo probabilmente non è qualcosa che vuoi, ma è disponibile.


58
2018-01-09 19:35



buona spiegazione Ma in quale script è il comando cleanup? ho visto /etc/init/mounted-temp.conf, ma ha la linea start on mounted MOUNTPOINT=/tmp questo mi fa pensare che non sia applicabile. - enzotib
Se non vuoi che un file venga rimosso automaticamente, inseriscilo /var/tmp invece di /tmp. - Gilles
È anche utile mantenere i file che non si desidera perdere (frame video renderizzati) quando il computer si blocca, probabilmente a causa di OOM. Una soluzione migliore sarebbe quella di risolvere il problema, naturalmente. :-) - Ken Sharp
Questo può essere fatto all'interno di Cygwin? - CMCDragonkai


Lo sto verificando 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 citano, il 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 il / tmp deve essere cancellato. Questo è quello che sto facendo per fermare i riavvii dalla cancellazione dei 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 eliminare 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 funzionare anche se il sistema non viene riavviato (come nel caso di un server sempre acceso). Questo è un grande vantaggio, penso.


29
2017-12-05 04:10



man tmpfiles.d - Martin Schröder
Ho scoperto che puoi conservare i permessi e il proprietario del file originale usando i trattini: d /tmp/ - - - 20d - Dave Yarwood
Vale anche la pena notare: è possibile testare la configurazione eseguendo il processo di pulizia manualmente: systemctl start systemd-tmpfiles-clean - Dave Yarwood


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


26
2018-04-19 12:00



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


Prima del 14.04:

Viene ripulito ogni volta che si riavvia.


10
2018-01-09 19:34



Appare con 14.04+ utilizza solo tmpreaper, non lo script "per avvio" FWIW - rogerdpack
I miei 14.04 sistemi si puliscono al riavvio. Mai nemmeno sentito parlare tmpreaper. - Ken Sharp
e se non riavvii mai il sistema? - phuclv


Su uno dei nostri server con Ubuntu, abbiamo uno script per rimuovere i file in / tmp e viene eseguito ogni 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 di cui sopra in un file chmod 775 il file e creare una voce cron per eseguirlo. Poiché si tratta di un server Web, non vogliamo riavviarlo per ovvi motivi.


5
2017-09-28 04:54



Potrebbe essere meglio usare tmpwatch. - poolie
L'ultima riga è estremamente pericolosa. Normalmente, tutti sono in grado di correre ln -s /usr /tmp/kaboom o anche ln -s /* /tmp/ ... - Daniel Alder


In un systemd Ubuntu (15.10 e successivi), questo è fatto da systemd, usando il systemd-tmpfiles-clean servizio e 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

Così systemd-tmpfiles-clean funziona allo spegnimento e una volta al giorno in caso contrario. I file puliti possono essere estesi usando /etc/tmpfiles.d menzionato in un'altra risposta.

È possibile modificare il comportamento del timer stesso utilizzando systemctl edit systemd-tmpfiles-clean.timere usando vari systemd Timer opzioni di configurazione (vedi man 5 systemd.timer).


3
2017-12-06 17:11