Boas Praticas de Limpeza do /tmp - tmpfiles.d e systemd-tmpfiles
O Que Voce Vai Aprender
- Como
/tmp,/var/tmpe/runsao gerenciados pelo systemd - Como escrever regras
tmpfiles.dpara limpeza personalizada - Como executar
systemd-tmpfilesmanualmente e de forma agendada
Resumo Rapido
- A limpeza automatica do
/tmpe feita pelosystemd-tmpfiles-clean.timer - Regras personalizadas vao em
/etc/tmpfiles.d/*.conf - Formato da regra:
tipo caminho modo uid gid idade argumento
Pre-requisitos
- SO: Ubuntu ou qualquer Linux baseado em systemd
- Acesso root ou sudo necessario
Por Que o /tmp Precisa de Limpeza?
/tmp e onde as aplicacoes gravam arquivos temporarios. Na maioria dos sistemas Ubuntu, ele e um tmpfs em RAM - limpo na reinicializacao. Servidores de longa duracao, porem, acumulam arquivos temporarios entre reinicializacoes, o que pode esgotar o espaco em disco e causar referencias obsoletas de arquivos PID ou socket.
- Usos tipicos: arquivos intermediarios de compressao, dados de sessao, arquivos socket
- Padrao Ubuntu:
/tmpe montado comotmpfs, entao e limpo na reinicializacao /var/tmp: persiste entre reinicializacoes por design - requer gerenciamento explicito
$ mount | grep /tmp tmpfs on /tmp type tmpfs (rw,nosuid,nodev)
Se /tmp e tmpfs, os arquivos desaparecem na reinicializacao. Se e baseado em disco, a limpeza e ainda mais critica. Verifique o uso com df -h /tmp.
O Que E o systemd-tmpfiles?
systemd-tmpfiles e a ferramenta declarativa para gerenciar diretorios temporarios - criando-os no boot, definindo permissoes e excluindo arquivos obsoletos de forma agendada.
Tres modos de operacao:
| Modo | Flag | Acao |
|---|---|---|
| Create | --create |
Criar arquivos/dirs conforme regras |
| Clean | --clean |
Excluir entradas mais antigas que o limite de idade |
| Remove | --remove |
Excluir tudo que corresponde as regras |
$ sudo systemd-tmpfiles --create $ sudo systemd-tmpfiles --clean $ sudo systemd-tmpfiles --remove
Duas unidades systemd executam isso automaticamente:
systemd-tmpfiles-setup.service- executa--createno bootsystemd-tmpfiles-clean.timer- executa--cleanperiodicamente (padrao: 15 min apos o boot, depois diariamente)
Como Escrever Regras tmpfiles.d
Coloque arquivos de configuracao em /etc/tmpfiles.d/. Os padroes do sistema ficam em /usr/lib/tmpfiles.d/ - nunca edite esses diretamente, pois atualizacoes de pacotes os sobrescrevem.
Formato
tipo caminho modo uid gid idade argumento
| Campo | Descricao | Exemplo |
|---|---|---|
| tipo | Tipo de operacao | d, f, x, e |
| caminho | Caminho alvo | /tmp/myapp |
| modo | Permissoes (octal) | 0755 |
| uid/gid | Proprietario (- = manter atual) |
root / - |
| idade | Limite de exclusao para --clean |
7d, 1h, - (nunca) |
| argumento | Conteudo inicial para arquivos | - |
Tipos Comuns
| Tipo | Significado |
|---|---|
d |
Criar diretorio se ausente; --clean remove arquivos antigos dentro |
D |
Como d, mas --remove tambem exclui o conteudo do diretorio |
f |
Criar arquivo se ausente |
f+ |
Criar ou truncar arquivo |
x |
Excluir de --clean e --remove |
e |
Definir permissoes em uma entrada existente |
z |
Definir permissoes e rotulos SELinux |
Como Executar a Limpeza Periodica
Verifique o timer de limpeza:
$ systemctl status systemd-tmpfiles-clean.timer
● systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories
Loaded: loaded (/lib/systemd/system/systemd-tmpfiles-clean.timer; static)
Active: active (waiting) since Mon 2024-01-01 00:00:00 UTC; 3h ago
Trigger: Tue 2024-01-02 00:15:30 UTC; 20h left
Acionar uma limpeza imediata:
$ sudo systemctl start systemd-tmpfiles-clean
--clean so age em entradas onde o campo de idade esta definido. Uma entrada com idade - nunca e excluida automaticamente.
Exemplos Praticos
Exemplo 1: Diretorio temporario por aplicacao com limpeza automatica
# /etc/tmpfiles.d/myapp.conf d /tmp/myapp 0750 myapp myapp 1d
Cria /tmp/myapp de propriedade de myapp:myapp com modo 0750, e exclui arquivos internos mais antigos que 1 dia.
Exemplo 2: Limpar logs da aplicacao em /var/tmp apos 7 dias
# /etc/tmpfiles.d/clean-var-tmp.conf d /var/tmp/app-logs 0755 root root 7d
Exemplo 3: Criar diretorio /run no boot sem exclusao automatica
# /etc/tmpfiles.d/myapp-run.conf d /run/myapp 0755 myapp myapp -
Idade - significa: criar no boot, nunca excluir automaticamente.
Exemplo 4: Excluir um caminho da limpeza
# /etc/tmpfiles.d/exclude.conf x /tmp/persistent-cache
--clean ignora /tmp/persistent-cache independentemente da idade.
Aplicar e verificar regras imediatamente
# Aplicar regras de criacao agora $ sudo systemd-tmpfiles --create /etc/tmpfiles.d/myapp.conf # Dry run: visualizar o que --clean excluiria $ sudo systemd-tmpfiles --clean --dry-run /etc/tmpfiles.d/myapp.conf
Sempre use --dry-run antes de executar --clean em uma nova regra. Ele mostra o que seria excluido sem fazer nenhuma alteracao.
Problemas Comuns
Arquivos nao estao sendo excluidos
Verifique se o campo de idade nao e -. Note tambem que --clean usa o atime (ultimo tempo de acesso) como limite, nao o mtime.
$ stat /tmp/myfile | grep Access
Se o sistema de arquivos e montado com noatime, o atime nunca e atualizado, entao os arquivos podem parecer mais antigos do que sao. Use touch -a /tmp/myfile para atualizar o atime manualmente ao testar.
Regras nao estao tendo efeito
Valide a configuracao diretamente:
$ sudo systemd-tmpfiles --create /etc/tmpfiles.d/myapp.conf
Verifique o journal em busca de erros:
$ journalctl -u systemd-tmpfiles-setup
Sobrescrever uma regra do sistema em /usr/lib/tmpfiles.d/
Coloque um arquivo com o mesmo nome em /etc/tmpfiles.d/ - ele tem prioridade. Ordem de carregamento: /etc > /run > /usr/lib.
# Visualizar a regra do sistema $ cat /usr/lib/tmpfiles.d/tmp.conf # Criar sua sobreposicao e edita-la $ sudo cp /usr/lib/tmpfiles.d/tmp.conf /etc/tmpfiles.d/tmp.conf
O que nao fazer
- Editar arquivos em
/usr/lib/tmpfiles.d/diretamente - atualizacoes de pacotes os sobrescrevem - Usar tipo
Dem um diretorio critico sem limite de idade ---removeexcluira todo o conteudo