Boas Práticas de Limpeza do /tmp - tmpfiles.d e systemd-tmpfiles
O Que Você Vai Aprender
- Como
/tmp,/var/tmpe/runsão gerenciados pelo systemd - Como escrever regras
tmpfiles.dpara limpeza personalizada - Como executar
systemd-tmpfilesmanualmente e de forma agendada
Resumo Rápido
- A limpeza automática do
/tmpe feita pelosystemd-tmpfiles-clean.timer - Regras personalizadas vão em
/etc/tmpfiles.d/*.conf - Formato da regra:
tipo caminho modo uid gid idade argumento
Pré-requisitos
- SO: Ubuntu ou qualquer Linux baseado em systemd
- Acesso root ou sudo necessário
Por Que o /tmp Precisa de Limpeza?
/tmp é onde as aplicações gravam arquivos temporários. Dependendo da versão, ele é um tmpfs em RAM (limpo na reinicialização) ou um diretório em disco. Servidores de longa duração, porém, acumulam arquivos temporários entre reinicializações, o que pode esgotar o espaço em disco e causar referências obsoletas de arquivos PID ou socket.
- Usos típicos: arquivos intermediários de compressão, dados de sessão, arquivos socket
- O que está por trás do
/tmpdepende da versão: umtmpfsem RAM ou um diretório no sistema de arquivos raiz (disco) - veja a tabela abaixo /var/tmp: persiste entre reinicializações por design - requer gerenciamento explícito
Verifique o que está por trás do /tmp no seu sistema
$ findmnt /tmp TARGET SOURCE FSTYPE OPTIONS /tmp tmpfs tmpfs rw,nosuid,nodev,size=4011076k,nr_inodes=1048576,inode64
Se FSTYPE for tmpfs, o /tmp fica em RAM. Se o comando não exibir nada (código de saída 1), o /tmp não é uma montagem separada - é um diretório comum no sistema de arquivos raiz. O df -h /tmp também mostra em qual sistema de arquivos o /tmp está e quanto espaço está livre.
$ df -h /tmp Filesystem Size Used Avail Use% Mounted on tmpfs 3.9G 12K 3.9G 1% /tmp
Se Mounted on mostrar /, o /tmp está no sistema de arquivos raiz (disco).
Padrão do Ubuntu por versão
| Versão | /tmp padrão |
|---|---|
| Ubuntu 22.04 LTS / 24.04 LTS | Em disco (normalmente um diretório no sistema de arquivos raiz); esvaziado na inicialização |
| Ubuntu 24.10 ou posterior (incluindo 26.04 LTS) | tmpfs (em RAM; o conteúdo é perdido na reinicialização) |
A partir do Ubuntu 24.10, o tmp.mount padrão do systemd passou a vir habilitado, o que torna o /tmp um tmpfs. As notas de versão do 26.04 LTS listam essa mudança entre as alterações desde o 24.04 LTS. (Fonte: Ubuntu 24.10 release notes, Ubuntu 26.04 LTS summary for LTS users, consultado em 2026-09-25)
Um /tmp em disco, como no 22.04 LTS e no 24.04 LTS, também não mantém o conteúdo entre reinicializações. O /usr/lib/tmpfiles.d/tmp.conf do Ubuntu declara o /tmp com o tipo D (D /tmp 1777 root root - no 22.04, D /tmp 1777 root root 30d no 24.04), e na inicialização o systemd-tmpfiles-setup.service é executado com --remove --boot, o que esvazia o /tmp. Coloque em /var/tmp os arquivos que precisam sobreviver a uma reinicialização. (Fonte: patch do tmp.conf no pacote systemd do Ubuntu para o 22.04 / 24.04, systemd-tmpfiles-setup.service (24.04), consultado em 2026-09-25)
Um /tmp em tmpfs é limpo na reinicialização, mas em servidores de longa duração os arquivos se acumulam entre as reinicializações e consomem RAM. Um /tmp em disco ocupa o disco da mesma forma. Em ambos os casos, a limpeza periódica com systemd-tmpfiles (explicada a seguir) é o que mantém o diretório sob controle.
O Que É o systemd-tmpfiles?
systemd-tmpfiles é a ferramenta declarativa para gerenciar diretórios temporários - criando-os no boot, definindo permissões e excluindo arquivos obsoletos de forma agendada.
Três modos de operação:
| Modo | Flag | Ação |
|---|---|---|
| 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 (padrão: 15 min após o boot, depois diariamente)
Como Escrever Regras tmpfiles.d
Coloque arquivos de configuração em /etc/tmpfiles.d/. Os padrões do sistema ficam em /usr/lib/tmpfiles.d/ - nunca edite esses diretamente, pois atualizações de pacotes os sobrescrevem.
Formato
tipo caminho modo uid gid idade argumento
| Campo | Descrição | Exemplo |
|---|---|---|
| tipo | Tipo de operação | d, f, x, e |
| caminho | Caminho alvo | /tmp/myapp |
| modo | Permissões (octal) | 0755 |
| uid/gid | Proprietário (- = manter atual) |
root / - |
| idade | Limite de exclusão para --clean |
7d, 1h, - (nunca) |
| argumento | Conteúdo inicial para arquivos | - |
Tipos Comuns
| Tipo | Significado |
|---|---|
d |
Criar diretório se ausente; --clean remove arquivos antigos dentro |
D |
Como d, mas --remove também exclui o conteúdo do diretório |
f |
Criar arquivo se ausente |
f+ |
Criar ou truncar arquivo |
x |
Excluir de --clean e --remove |
e |
Definir permissões em uma entrada existente |
z |
Definir permissões e rótulos SELinux |
Como Executar a Limpeza Periódica
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 só age em entradas onde o campo de idade está definido. Uma entrada com idade - nunca é excluída automaticamente.
Exemplos Práticos
Exemplo 1: Diretório temporário por aplicação com limpeza automática
# /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 aplicação em /var/tmp após 7 dias
# /etc/tmpfiles.d/clean-var-tmp.conf d /var/tmp/app-logs 0755 root root 7d
Exemplo 3: Criar diretório /run no boot sem exclusão automática
# /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 excluído sem fazer nenhuma alteração.
Problemas Comuns
Arquivos não estão sendo excluídos
Verifique se o campo de idade não é -. Note também que --clean usa o atime (último tempo de acesso) como limite, não o mtime.
$ stat /tmp/myfile | grep Access
Se o sistema de arquivos é montado com noatime, o atime nunca é atualizado, então os arquivos podem parecer mais antigos do que são. Use touch -a /tmp/myfile para atualizar o atime manualmente ao testar.
Regras não estão tendo efeito
Valide a configuração 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 não fazer
- Editar arquivos em
/usr/lib/tmpfiles.d/diretamente - atualizações de pacotes os sobrescrevem - Usar tipo
Dem um diretório crítico sem limite de idade ---removeexcluirá todo o conteúdo