2009-02-11 9 views
6

Metto alcuni file in/tmp su un server Web che vengono utilizzati da un'applicazione Web per un periodo di tempo limitato. Se i file vengono lasciati nel/tmp del server dopo che l'utente ha smesso di usare l'applicazione e questo accade ripetutamente, dovrei preoccuparmi che la directory si riempia? Ho letto online che il riavvio elimina la directory/tmp, ma questa finestra non viene riavviata molto.Can/tmp in Linux si riempie mai?

Tom

risposta

17

Sì, si riempirà. Prendi in considerazione l'implementazione di un cron job che cancellerà i vecchi file dopo un po '.

Qualcosa del genere dovrebbe fare il trucco:

/usr/bin/find /tmp/mydata -type f -atime +1 -exec rm -f {} \; 

Questo cancellerà i file che hanno un tempo di modifica che è più di un giorno di vita.

O come voce crontab:

# run five minutes after midnight, every day 
    5 0 * * *  /usr/bin/find /tmp/mydata -type f -atime +1 -exec rm -f {} \; 

dove/tmp/mydata è una sottodirectory in cui l'applicazione memorizza i file temporanei. (Cancellare semplicemente vecchi file sotto/tmp sarebbe una pessima idea, come qualcuno ha fatto notare qui.)

Guarda il crontab e trova le pagine man per i dettagli. Non andare in esecuzione script che cancellano i file sul tuo filesystem senza capirne tutti i dettagli - è così che accadono cose brutte ai buoni server. :)

Ovviamente, se è possibile modificare l'applicazione per eliminare i file temporanei quando viene eseguita con loro, in genere sarebbe una soluzione molto migliore.

+1

Ricordo che c'era un bug in cui "find" o "rm" avrebbero seguito i collegamenti simbolici ... Non sono proprio sicuro. Ma potrebbe essere importante provare prima di usarlo. Perché se qualcuno fa qualcosa come ln -s// tmp/ItWillEraseEverything. Potrebbe non essere così divertente se il tuo cron job segue i link simbolici. –

+1

Durante la pulizia di/tmp, prestare attenzione ai problemi di sicurezza. In Debian e derivati, tmpreaper dovrebbe essere utile. –

+1

Ecco perché alcune implementazioni UNIX (ad esempio Solaris) elimineranno sempre/tmp al riavvio. In genere ci sono anche i cron jobs in atto per ripulire/tmp una volta ogni tanto. Questo dipende dalla tua distribuzione LINUX. Dovresti inserire un cron job per questo, se non ce n'è uno. – Tilo

4

Yep Esso è legato ad uno dei dischi/partizioni e può riempire. Viene eliminato al riavvio.

Quando l'utente chiude l'applicazione, è necessario pulire i file dopo di essi.

+0

Questo è configurabile, e per nulla vero su tutte le distribuzioni. –

5

L'unica cosa a cui è possibile scrivere senza preoccuparsi si riempirà /dev/null. Tutto il resto finirà per esaurire lo spazio se continui a far cadere cose in esso.

Un approccio semplice sarebbe quella di avere un job cron ripulire tutti i tuoi /tmp i file che sono più vecchi rispetto, ad esempio, un paio di giorni.

0

Alcune distribuzioni di Linux dispongono di un pacchetto che ripulirà i vecchi file in/tmp. Non è difficile implementare la tua, come menzionato sopra. Una cosa da tenere a mente sono i processi a lunga gittata, in particolare gli "zombi", che sono morti ma che non hanno finito di ripulire se stessi. Se un processo ha un file aperto, semplicemente cancellandolo da/tmp non verrà effettivamente recuperato lo spazio - devi uccidere il processo o forzarlo in qualche modo per chiudere il file. Molti programmi che scrivono log o file temporanei sono progettati per catturare un segnale (spesso SIGUSR1) e chiudere e riaprire qualsiasi registro o file temporanei per questo motivo.

0

Molte distribuzioni Linux includono qualcosa denominato "tmpwatch" o simile che viene eseguito tramite cron ed elimina le cose su un gradiente predefinito. Alcuni sono abbastanza intelligenti da andare dal proprietario del file .. roba che è di proprietà degli utenti daemon viene ripulita più rapidamente di quanto non sia roba di proprietà di utenti regolari. Controlla le mailing list per la tua distro di scelta per scoprirlo.

Ancora, dovresti avere SNMP o qualche altro tipo di monitor che guarda quanta stanza è disponibile, se riempie servizi come Apache non saranno felici. Ad esempio, e-accelerator per PHP avrà bisogno di molto spazio, alcuni scanner di posta non puliscono correttamente, ecc.

+0

I thing una combinazione di cron e tmpwatch è una buona soluzione a questo problema. Grazie –

1

In quale lingua è la tua applicazione web? Un sacco di lingue propongono file temporanei:

Cerca nella tua lingua, se v'è una tale funzione.

+1

Forse mi manca qualcosa qui, ma non era la domanda sull'eliminazione di file temporanei, non la creazione ?? –

3

Non è possibile cancellare ciecamente tutto ciò che non è stato modificato per un certo periodo di tempo. Un sacco di programmi memorizzano le prese lì, che non vengono mai modificate ma sono ancora parte integrante del funzionamento del programma. Prendete per esempio mysql da uno dei miei assistenti:

srwxrwxrwx 1 mysql mysql   0 Sep 11 04:01 mysql.sock= 

Questa è una, di lavoro "file" valido/tmp. Sembra solo vecchio perché mysql non è stato riavviato da un po '. Limita la ricerca con '-type f' o '-atime', oppure usa uno degli strumenti forniti dalla distribuzione che altri hanno menzionato.

0

Solo un avvertimento: non tutte le installazioni Linux pulire la directory/tmp dopo ogni riavvio

Problemi correlati