Questão Como o diretório / tmp é limpo?


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


262
2018-01-09 19:26


origem


Meus arquivos temporários nunca são gravados no disco. Eles são gravados em um disco RAM. Eu coloquei tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0 em / etc / fstab. - Anonymous


Respostas:


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 14.04 veja https://askubuntu.com/a/759048/1366

Para 16.10 ver https://askubuntu.com/a/857154/453746


Resposta antiga de 2011:

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

O script faz aproximadamente o seguinte: se um arquivo /tmp É mais velho que $TMPTIME dias será apagado.

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


178
2018-01-10 00:17



Isso não é mais válido para 14.04 (o script não existe mais). - Martin Schröder
@Martin Schröder - o script existe no meu sistema e é uma instalação limpa do 14.04 e o tmpreaper não existe! - Lance Holland
Eu estou usando o arch linux agora, então não posso verificar. Desculpa. Por favor, alguém verifique isso e comente ou edite minha resposta. - lesmana
no ubuntu 16.04 tmpreaper é abandonado como un-seguro por favor veja: fossies.org/linux/tmpreaper/debian/README.security - Tamerlaha
Não. No Ubuntu 16.04, ele é simplesmente substituído por um mecanismo systemd. Leia esse documento, e o que você realmente encontrará é uma explicação de por que a análise de segurança alegando insegurança é falha. - JdeBP


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 como freqüente o diretório tmp deve ser limpo em dias


135
2018-01-09 19:35



Limpar a cada inicialização não é ideal para uma máquina que nunca é reinicializada, como um servidor. Eu tenho mais de 500.000 arquivos ocupando 5Gb de espaço em meu / tmp porque meu servidor tem 378 dias de atividade. Estou relutante em reiniciá-lo, simplesmente porque a limpeza desses arquivos na reinicialização leva horas. - rjmunro
No seu caso, você deve dar tmpreaper uma chance. - qbi
Um trabalho CRON poderia facilmente resolver isso. - Ken Sharp
Além disso tmpwatch deve ser uma ferramenta apropriada. - ArekBulski
Parece que o Ubuntu / systemd já fornece uma solução. Eu diria mais, mas .... systemd. - Ken Sharp


Enquanto o /tmp pasta não é um lugar para armazenar arquivos a longo prazo, ocasionalmente, você deseja manter as coisas um pouco mais do que o da próxima vez que você reiniciar, que é o padrão nos sistemas Ubuntu. Eu sei que uma vez ou duas eu baixei algo para /tmp durante o teste, reinicializou após fazer alterações e, em seguida, perdeu os dados originais novamente. Isso pode ser alterado se você quiser manter seu /tmp arquivos um pouco mais.

Alterando a /tmp Freqüência de limpeza

A configuração padrão que informa ao seu sistema para limpar /tmp na reinicialização é realizada no /etc/default/rcS Arquivo. O valor que vamos analisar é TMPTIME.

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

TMPTIME=7

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


59
2018-01-09 19:35



boa explicação. Mas em qual script é o comando de limpeza? Eu tenho visto /etc/init/mounted-temp.conf, mas tem a linha start on mounted MOUNTPOINT=/tmp que me faz pensar que não é aplicável. - enzotib
Se você não quiser que um arquivo seja removido automaticamente, coloque-o /var/tmp ao invés de /tmp. - Gilles
Também é útil manter os arquivos que você não quer perder (quadros de vídeo renderizados) quando a máquina falha, possivelmente devido à OOM. Uma solução melhor seria consertar o problema, é claro. :-) - Ken Sharp
Isso pode ser feito dentro do Cygwin? - CMCDragonkai


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.

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


29
2017-12-05 04:10



man tmpfiles.d - Martin Schröder
Descobri que você pode preservar as permissões e o proprietário do arquivo original usando hifens: d /tmp/ - - - 20d - Dave Yarwood
Também vale a pena notar: você pode testar sua configuração executando o trabalho de limpeza manualmente: systemctl start systemd-tmpfiles-clean - Dave Yarwood


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.


26
2018-04-19 12:00



no meu sistema, o tmpreaper não estava em /etc/cron.daily - mas eu consegui instalá-lo com o apt-get - Joe Germuska


Antes de 14.04:

Ele é limpo toda vez que você reinicia.


10
2018-01-09 19:34



Aparece com 14.04+ ele usa somente tmpreaper, não o script "per boot" FWIW - rogerdpack
Todos os meus sistemas 14.04 são limpos na reinicialização. Nunca ouvi falar de tmpreaper. - Ken Sharp
E se você nunca reiniciar o sistema? - phuclv


Em um dos nossos servidores rodando Ubuntu, nós 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 {} \;

Apenas salve o conteúdo acima em um arquivo chmod 775 do arquivo e crie uma entrada cron para executá-lo. Como este é um servidor web, não queremos reinicializá-lo por razões óbvias.


5
2017-09-28 04:54



Você pode estar melhor usando tmpwatch. - poolie
A última linha é extremamente perigosa. Normalmente, todo mundo é capaz de executar ln -s /usr /tmp/kaboom ou até mesmo ln -s /* /tmp/ ... - Daniel Alder


Em um systemd Ubuntu (15.10 e mais recente), isso é feito pelo systemd, usando o systemd-tmpfiles-clean serviço e temporizador:

$ 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

assim systemd-tmpfiles-clean é executado no desligamento e uma vez por dia, caso contrário. Os arquivos limpos podem ser estendidos usando /etc/tmpfiles.d mencionado em outra resposta.

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


3
2017-12-06 17:11