Como o diretório / tmp é limpo?

257

Como o diretório /tmp é limpo? É automático? Em caso afirmativo, com que frequência é limpo?

    
por Olivier Lalonde 09.01.2011 / 20:26

8 respostas

175

Nota! Esta resposta está desatualizada desde pelo menos o Ubuntu 14.04. Veja outras respostas para a situação atual e, se elas se mostrarem corretas, subaçá-las furiosamente. Também postar comentário para que eu possa colocar link aqui para resposta correta atual.

Para o 14.04, consulte link

Para 16.10, consulte link

Resposta antiga de 2011:

A limpeza de /tmp é feita pelo script upstart /etc/init/mounted-tmp.conf . O script é executado pelo upstart toda vez que /tmp é montado. Praticamente isso significa a cada inicialização.

O script faz aproximadamente o seguinte: se um arquivo em /tmp for mais antigo que $TMPTIME dias, ele será excluído.

O valor padrão de $TMPTIME é 0, o que significa que todos os arquivos e diretórios em /tmp são excluídos. $TMPTIME é uma variável de ambiente definida em /etc/default/rcS .

    
por lesmana 10.01.2011 / 01:17
134

O diretório é limpo por padrão a cada inicialização, porque TMPTIME é 0 por padrão.

Aqui você pode alterar a hora no seguinte arquivo:

/etc/default/rcS

TMPTIME diz quão freqüente o diretório tmp deve ser limpo nos dias

    
por Max Ruf 09.01.2011 / 20:35
58

Enquanto a pasta /tmp não é um lugar para armazenar arquivos a longo prazo, ocasionalmente você quer manter as coisas um pouco mais longas do que a próxima vez que você reinicia , que é o padrão nos sistemas Ubuntu . Eu sei que uma ou duas vezes fiz o download de algo para /tmp durante o teste, reiniciei depois de fazer alterações e, em seguida, perdi os dados originais novamente. Isso pode ser alterado se você quiser manter seus arquivos /tmp um pouco mais longos.

Alterando a frequência de limpeza /tmp

A configuração padrão que informa ao sistema para limpar /tmp na reinicialização é mantida no arquivo /etc/default/rcS . O valor que veremos é TMPTIME .

O valor atual de TMPTIME=0 diz excluir arquivos na reinicialização apesar da idade do arquivo. Alterar esse valor para um número diferente (positivo) mudará o número de dias que um arquivo pode sobreviver em /tmp .

TMPTIME=7

Essa configuração permite que os arquivos permaneçam em /tmp até que tenham uma semana e, em seguida, os excluam na próxima reinicialização. Um número negativo ( TMPTIME=-1 ) informa ao sistema para nunca excluir nada em /tmp . Isso provavelmente não é algo que você quer, mas está disponível.

    
por hhlp 09.01.2011 / 20:35
26

No Ubuntu 14.04 isso é feito por tmpreaper , que é chamado diariamente pelo cron (de /etc/cron.daily ). O programa pode ser configurado via /etc/default/rcS e /etc/tmpreaper.conf .

    
por Martin Schröder 19.04.2016 / 14:00
24

Estou verificando isso no Ubuntu 16.10. Eu posso certificar que a edição de / etc / default / rcS não tem mais nenhum efeito e os arquivos em tmp são apagados pela reinicialização, não importa o que você coloque nesse arquivo. Como outros mencionam, o tmpreaper não é mais usado.

Acho que a resposta certa é que o Ubuntu 16.10 tem uma nova configuração. Existe uma pasta /etc/tmpfiles.d, documentada na página man "tmpfiles.d". Nessa pasta, deve-se colocar um arquivo de configuração para controlar se o / tmp deve ser apagado. Isso é o que estou fazendo para impedir que as reinicializações apaguem arquivos em / tmp, a menos que tenham 20 dias:

#/etc/tmpfiles.d/tmp.conf

d /tmp 1777 root root 20d

Substitua "20d" por "-" se você nunca quiser arquivos excluídos. Este é o meu melhor esforço, essa página de manual é quase impenetrável com detalhes.

A vantagem da nova configuração é que um limpador de arquivos ainda pode ser executado mesmo se o sistema não for reinicializado (como no caso de um servidor sempre ativo). Isso é uma grande vantagem, eu acho.

    
por pauljohn32 05.12.2016 / 05:10
10

Antes das 14h04:

Ele é limpo toda vez que você reinicia.

    
por Utku Demir 09.01.2011 / 20:34
4

Em um de nossos servidores rodando Ubuntu, temos um script para remover arquivos em / tmp e roda todas as noites.

O 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 salvar o conteúdo acima em um arquivo chmod 775 do arquivo e criar uma entrada cron para executá-lo. Como este é um servidor web, não queremos reinicializá-lo por razões óbvias.

    
por Paul 28.09.2011 / 06:54
3

Em um systemd Ubuntu (15.10 e mais recente), isso é feito pelo systemd, usando o systemd-tmpfiles-clean service 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

Portanto, systemd-tmpfiles-clean é executado no encerramento e uma vez por dia, caso contrário. Os arquivos que ele limpa podem ser estendidos usando /etc/tmpfiles.d mencionado em outra resposta .

Você pode alterar o comportamento do timer usando systemctl edit systemd-tmpfiles-clean.timer e usando várias opções de configuração systemd Timer (veja man 5 systemd.timer ).

    
por muru 06.12.2017 / 18:11