Come viene ripulita la directory / tmp?

262

Come viene ripulita la directory /tmp ? È automatico? In tal caso, con quale frequenza viene ripulito?

    
posta Olivier Lalonde 09.01.2011 - 20:26

8 risposte

177

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. Pubblica anche un commento in modo da poter inserire il link qui alla risposta corretta corrente.

Per 14.04 vedi link

Per 16.10 vedi link

Vecchia risposta del 2011:

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

Lo script fa all'incirca quanto segue: se un file in /tmp è precedente a $TMPTIME giorni verrà eliminato.

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

    
risposta data lesmana 10.01.2011 - 01:17
134

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

Qui puoi cambiare l'orario nel seguente file:

/etc/default/rcS

TMPTIME dice quanto è frequente che la directory tmp venga cancellata in giorni

    
risposta data Max Ruf 09.01.2011 - 20:35
58

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

Modifica della frequenza di pulizia /tmp

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

Il valore corrente di TMPTIME=0 dice di eliminare 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 in /tmp .

TMPTIME=7

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

    
risposta data hhlp 09.01.2011 - 20:35
27

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 menzionano, tmpreaper non è 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 che i file vengano cancellati. 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, credo.

    
risposta data pauljohn32 05.12.2016 - 05:10
26

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

    
risposta data Martin Schröder 19.04.2016 - 14:00
10

Prima delle 14.04:

Viene ripulito ogni volta che si riavvia.

    
risposta data Utku Demir 09.01.2011 - 20:34
5

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 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.

    
risposta data Paul 28.09.2011 - 06:54
3

In una systemd Ubuntu (15.10 e successive), questo viene fatto da systemd, usando il systemd-tmpfiles-clean di servizio 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-clean viene eseguito all'arresto e una volta al giorno in caso contrario. I file puliti possono essere estesi utilizzando /etc/tmpfiles.d menzionato in un'altra risposta .

Puoi cambiare il comportamento del timer stesso usando systemctl edit systemd-tmpfiles-clean.timer , e usando varie opzioni di configurazione systemd Timer (vedi man 5 systemd.timer ).

    
risposta data muru 06.12.2017 - 18:11

Leggi altre domande sui tag