Come viene /tmp
ripulita la directory? È automatico? In tal caso, con che frequenza viene pulita?
Come viene /tmp
ripulita la directory? È automatico? In tal caso, con che frequenza viene pulita?
Risposte:
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 /tmp
viene eseguita dallo script upstart /etc/init/mounted-tmp.conf
. Lo script viene eseguito da upstart ogni volta che /tmp
viene montato. Praticamente ciò significa ad ogni avvio.
Lo script esegue all'incirca quanto segue: se un file /tmp
è più vecchio di $TMPTIME
giorni verrà eliminato.
Il valore predefinito $TMPTIME
è 0, il che significa che tutti i file e tutte le directory /tmp
vengono eliminati. $TMPTIME
è una variabile d'ambiente definita in /etc/default/rcS
.
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
tmpreaper
una possibilità.
tmpwatch
dovrebbe essere uno strumento appropriato.
Mentre la /tmp
cartella 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 /tmp
durante il test, riavviato dopo aver apportato modifiche e quindi perso di nuovo i dati originali. Questo può essere modificato se desideri mantenere i tuoi /tmp
file un po 'più a lungo.
Modifica della /tmp
frequenza di pulizia
L'impostazione predefinita che dice al sistema di cancellare /tmp
al riavvio è contenuta nel /etc/default/rcS
file. Il valore che vedremo è TMPTIME
.
Il valore corrente di TMPTIME=0
dice 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 /tmp
fino 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.
/etc/init/mounted-temp.conf
, ma ha la linea start on mounted MOUNTPOINT=/tmp
che mi fa pensare che non sia applicabile.
/var/tmp
invece di /tmp
.
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.
man tmpfiles.d
d /tmp/ - - - 20d
systemctl start systemd-tmpfiles-clean
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/rcS
e /etc/tmpreaper.conf
.
Viene ripulito ogni volta che si riavvia.
tmpreaper
.
In un systemd
Ubuntu (15.10 e successivi), questo viene fatto da systemd, usando il systemd-tmpfiles-clean
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 allo spegnimento e, una volta al giorno, altrimenti. I file che pulisce 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.timer
e utilizzando varie Timer
opzioni di configurazione del sistema (vedere man 5 systemd.timer
).
/tmp
non è stato ancora pulito. e ho bisogno che venga ripulito. anche l'avvio manuale sudo systemctl start systemd-tmpfiles-clean
non fa il trucco. Qualche idea sul perché?
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.
ln -s /usr /tmp/kaboom
o addirittura ln -s /* /tmp/
...
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
/ etc / fstab.