Como o /tmp
diretório é limpo? É automático? Em caso afirmativo, com que frequência é limpo?
Como o /tmp
diretório é limpo? É automático? Em caso afirmativo, com que frequência é limpo?
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, faça um voto positivo. Também postar comentário para que eu possa colocar o link aqui para a resposta correta atual.
Para 14.04, consulte https://askubuntu.com/a/759048/1366
Para 16.10, consulte https://askubuntu.com/a/857154/453746
Antiga resposta de 2011:
A limpeza /tmp
é feita pelo script inicial /etc/init/mounted-tmp.conf
. O script é executado pelo iniciante toda vez que /tmp
é montado. Praticamente isso significa em cada inicialização.
O script faz aproximadamente o seguinte: se um arquivo /tmp
tiver mais de um $TMPTIME
dia, ele será excluído.
O valor padrão $TMPTIME
é 0, o que significa que todos os arquivos e diretórios /tmp
são excluídos. $TMPTIME
é uma variável de ambiente definida em /etc/default/rcS
.
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 com que frequência o diretório tmp deve ser limpo em dias
tmpreaper
uma chance.
tmpwatch
deve ser uma ferramenta apropriada.
Embora a /tmp
pasta não seja um local para armazenar arquivos a longo prazo, ocasionalmente você deseja manter as coisas um pouco mais do que na próxima vez que reiniciar , o que é o padrão nos sistemas Ubuntu. Sei uma ou duas vezes que baixei algo /tmp
durante o teste, reiniciei depois de fazer alterações e perdi os dados originais novamente. Isso pode ser alterado se você quiser manter seus /tmp
arquivos um pouco mais.
Alterando a /tmp
frequência de limpeza
A configuração padrão que informa ao sistema para limpar /tmp
na reinicialização é mantida no /etc/default/rcS
arquivo. 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 em que um arquivo pode sobreviver /tmp
.
TMPTIME=7
Essa configuração permite que os arquivos permaneçam /tmp
até uma semana de idade e os exclua na próxima reinicialização. Um número negativo ( TMPTIME=-1
) indica ao sistema para nunca excluir nada /tmp
. Provavelmente, isso não é algo que você deseja, mas está disponível.
/etc/init/mounted-temp.conf
, mas tem a linha start on mounted MOUNTPOINT=/tmp
que me faz pensar que não é aplicável.
/var/tmp
vez de /tmp
.
Estou verificando isso no Ubuntu 16.10. Posso certificar que a edição de / etc / default / rcS não tem mais efeito algum e os arquivos em tmp são eliminados pela reinicialização, independentemente do que você colocar 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. Há uma pasta /etc/tmpfiles.d, documentada na página de manual "tmpfiles.d". Nessa pasta, deve-se colocar um arquivo de configuração para controlar se o / tmp deve ser apagado. Isto é o que estou fazendo para impedir que as reinicializações apaguem arquivos no / 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 excluir os arquivos. 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 que o sistema não seja reinicializado (como no caso de um servidor sempre ativo). Essa é uma grande vantagem, eu acho.
man tmpfiles.d
d /tmp/ - - - 20d
systemctl start systemd-tmpfiles-clean
No Ubuntu 14.04, isso é feito por tmpreaper
, chamado diariamente pelo cron (from /etc/cron.daily
). O programa pode ser configurado via /etc/default/rcS
e /etc/tmpreaper.conf
.
É limpo toda vez que você reinicia.
tmpreaper
.
Em um systemd
Ubuntu (15.10 e mais recente), isso é feito pelo systemd, usando o systemd-tmpfiles-clean
serviço e o 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
Então, systemd-tmpfiles-clean
é executado no desligamento, e uma vez por dia, caso contrário. Os arquivos que ele limpa podem ser estendidos usando os /etc/tmpfiles.d
mencionados em outra resposta .
Você pode alterar o comportamento do timer usando systemctl edit systemd-tmpfiles-clean.timer
e usando várias Timer
opções de configuração do systemd (consulte man 5 systemd.timer
).
/tmp
ainda não está limpo. e eu preciso que seja limpo. até o início manual sudo systemctl start systemd-tmpfiles-clean
não funciona. Alguma idéia do porquê?
Em um de nossos servidores executando o Ubuntu, temos um script para remover arquivos em / tmp e ele é executado 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 e crie uma entrada cron para executá-lo. Como este é um servidor web, não queremos reiniciá-lo por razões óbvias.
ln -s /usr /tmp/kaboom
ou mesmo ln -s /* /tmp/
...
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
no / etc / fstab.